Module Name: src Committed By: uwe Date: Sun Oct 6 01:04:49 UTC 2019
Modified Files: src/sys/dev/ic: adw.c adwlib.c adwlib.h Log Message: Get rid of bogus ADW_CALLBACK typedef. Use the real callback types directly. Since we no longer need the casting dance we can get rid of ADW_ISR_CALLBACK and ADW_ASYNC_CALLBACK typedefs too. The diff for adwlib.h looks larger than it is b/c we need to reorder structure definitions for the proper callback declaration. Found by gcc8 -Wcast-function-type. To generate a diff of this commit: cvs rdiff -u -r1.54 -r1.55 src/sys/dev/ic/adw.c cvs rdiff -u -r1.42 -r1.43 src/sys/dev/ic/adwlib.c cvs rdiff -u -r1.21 -r1.22 src/sys/dev/ic/adwlib.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/ic/adw.c diff -u src/sys/dev/ic/adw.c:1.54 src/sys/dev/ic/adw.c:1.55 --- src/sys/dev/ic/adw.c:1.54 Thu Jul 14 04:19:26 2016 +++ src/sys/dev/ic/adw.c Sun Oct 6 01:04:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: adw.c,v 1.54 2016/07/14 04:19:26 msaitoh Exp $ */ +/* $NetBSD: adw.c,v 1.55 2019/10/06 01:04:49 uwe Exp $ */ /* * Generic driver for the Advanced Systems Inc. SCSI controllers @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: adw.c,v 1.54 2016/07/14 04:19:26 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: adw.c,v 1.55 2019/10/06 01:04:49 uwe Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -398,8 +398,8 @@ adw_init(ADW_SOFTC *sc) "setting. Using automatic termination.\n"); } - sc->isr_callback = (ADW_CALLBACK) adw_isr_callback; - sc->async_callback = (ADW_CALLBACK) adw_async_callback; + sc->isr_callback = adw_isr_callback; + sc->async_callback = adw_async_callback; return 0; } Index: src/sys/dev/ic/adwlib.c diff -u src/sys/dev/ic/adwlib.c:1.42 src/sys/dev/ic/adwlib.c:1.43 --- src/sys/dev/ic/adwlib.c:1.42 Sun Feb 3 03:19:27 2019 +++ src/sys/dev/ic/adwlib.c Sun Oct 6 01:04:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: adwlib.c,v 1.42 2019/02/03 03:19:27 mrg Exp $ */ +/* $NetBSD: adwlib.c,v 1.43 2019/10/06 01:04:49 uwe Exp $ */ /* * Low level routines for the Advanced Systems Inc. SCSI controllers chips @@ -52,7 +52,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: adwlib.c,v 1.42 2019/02/03 03:19:27 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: adwlib.c,v 1.43 2019/10/06 01:04:49 uwe Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -2021,7 +2021,7 @@ AdwISR(ADW_SOFTC *sc) } if (sc->async_callback != 0) { - (*(ADW_ASYNC_CALLBACK)sc->async_callback)(sc, intrb_code); + (*sc->async_callback)(sc, intrb_code); } } @@ -2098,7 +2098,7 @@ AdwISR(ADW_SOFTC *sc) * Notify the driver of the completed request by passing * the ADW_SCSI_REQ_Q pointer to its callback function. */ - (*(ADW_ISR_CALLBACK)sc->isr_callback)(sc, scsiq); + (*sc->isr_callback)(sc, scsiq); /* * Note: After the driver callback function is called, 'scsiq' * can no longer be referenced. Index: src/sys/dev/ic/adwlib.h diff -u src/sys/dev/ic/adwlib.h:1.21 src/sys/dev/ic/adwlib.h:1.22 --- src/sys/dev/ic/adwlib.h:1.21 Sat Oct 27 17:18:18 2012 +++ src/sys/dev/ic/adwlib.h Sun Oct 6 01:04:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: adwlib.h,v 1.21 2012/10/27 17:18:18 chs Exp $ */ +/* $NetBSD: adwlib.h,v 1.22 2019/10/06 01:04:49 uwe Exp $ */ /* * Definitions for low level routines and data structures @@ -717,80 +717,6 @@ typedef struct adw_sg_block { /* - * Adapter operation variable structure. - * - * One structure is required per host adapter. - * - * Field naming convention: - * - * *_able indicates both whether a feature should be enabled or disabled - * and whether a device is capable of the feature. At initialization - * this field may be set, but later if a device is found to be incapable - * of the feature, the field is cleared. - */ -#define CCB_HASH_SIZE 32 /* hash table size for phystokv */ -#define CCB_HASH_SHIFT 9 -#define CCB_HASH(x) ((((x)) >> CCB_HASH_SHIFT) & (CCB_HASH_SIZE - 1)) - -typedef int (* ADW_CALLBACK) (int); - -typedef struct adw_softc { - - device_t sc_dev; - - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; - bus_dma_tag_t sc_dmat; - bus_dmamap_t sc_dmamap_control; /* maps the control structures */ - bus_dmamap_t sc_dmamap_carrier; /* maps the carrier structures */ - void *sc_ih; - - struct adw_control *sc_control; /* control structures */ - - struct adw_ccb *sc_ccbhash[CCB_HASH_SIZE]; - TAILQ_HEAD(, adw_ccb) sc_free_ccb, sc_waiting_ccb; - TAILQ_HEAD(adw_pending_ccb, adw_ccb) sc_pending_ccb; - struct scsipi_adapter sc_adapter; - struct scsipi_channel sc_channel; - - int sc_freeze_dev[ADW_MAX_TID+1]; - - ADW_CALLBACK isr_callback; /* pointer to function, called in AdwISR() */ - ADW_CALLBACK async_callback; /* pointer to function, called in AdwISR() */ - u_int16_t bios_ctrl; /* BIOS control word, EEPROM word 12 */ - u_int16_t wdtr_able; /* try WDTR for a device */ - u_int16_t sdtr_able; /* try SDTR for a device */ - u_int16_t ultra_able; /* try SDTR Ultra speed for a device */ - u_int16_t sdtr_speed1; /* EEPROM SDTR Speed for TID 0-3 */ - u_int16_t sdtr_speed2; /* EEPROM SDTR Speed for TID 4-7 */ - u_int16_t sdtr_speed3; /* EEPROM SDTR Speed for TID 8-11 */ - u_int16_t sdtr_speed4; /* EEPROM SDTR Speed for TID 12-15 */ - u_int16_t tagqng_able; /* try tagged queuing with a device */ - u_int16_t ppr_able; /* PPR message capable per TID bitmask. */ - u_int16_t start_motor; /* start motor command allowed */ - u_int8_t max_dvc_qng; /* maximum number of tagged commands per device */ - u_int8_t scsi_reset_wait; /* delay in seconds after scsi bus reset */ - u_int8_t chip_no; /* should be assigned by caller */ - u_int8_t max_host_qng; /* maximum number of Q'ed command allowed */ - u_int8_t irq_no; /* IRQ number */ - u_int8_t chip_type; /* chip SCSI target ID */ - u_int16_t no_scam; /* scam_tolerant of EEPROM */ - u_int32_t drv_ptr; /* driver pointer to private structure */ - u_int8_t chip_scsi_id; /* chip SCSI target ID */ - u_int8_t bist_err_code; - u_int16_t carr_pending_cnt; /* Count of pending carriers. */ - struct adw_carrier *carr_freelist; /* Carrier free list. */ - struct adw_carrier *icq_sp; /* Initiator command queue stopper pointer. */ - struct adw_carrier *irq_sp; /* Initiator response queue stopper pointer. */ - /* - * Note: The following fields will not be used after initialization. The - * driver may discard the buffer after initialization is done. - */ - ADW_DVC_CFG cfg; /* temporary configuration structure */ -} ADW_SOFTC; - - -/* * ADW_SCSI_REQ_Q - microcode request structure * * All fields in this structure up to byte 60 are used by the microcode. @@ -884,6 +810,80 @@ typedef struct adw_scsi_req_q { /* + * Adapter operation variable structure. + * + * One structure is required per host adapter. + * + * Field naming convention: + * + * *_able indicates both whether a feature should be enabled or disabled + * and whether a device is capable of the feature. At initialization + * this field may be set, but later if a device is found to be incapable + * of the feature, the field is cleared. + */ +#define CCB_HASH_SIZE 32 /* hash table size for phystokv */ +#define CCB_HASH_SHIFT 9 +#define CCB_HASH(x) ((((x)) >> CCB_HASH_SHIFT) & (CCB_HASH_SIZE - 1)) + +typedef struct adw_softc { + + device_t sc_dev; + + bus_space_tag_t sc_iot; + bus_space_handle_t sc_ioh; + bus_dma_tag_t sc_dmat; + bus_dmamap_t sc_dmamap_control; /* maps the control structures */ + bus_dmamap_t sc_dmamap_carrier; /* maps the carrier structures */ + void *sc_ih; + + struct adw_control *sc_control; /* control structures */ + + struct adw_ccb *sc_ccbhash[CCB_HASH_SIZE]; + TAILQ_HEAD(, adw_ccb) sc_free_ccb, sc_waiting_ccb; + TAILQ_HEAD(adw_pending_ccb, adw_ccb) sc_pending_ccb; + struct scsipi_adapter sc_adapter; + struct scsipi_channel sc_channel; + + int sc_freeze_dev[ADW_MAX_TID+1]; + + /* pointers to functions, called in AdwISR() */ + void (*isr_callback)(struct adw_softc *, ADW_SCSI_REQ_Q *); + void (*async_callback)(struct adw_softc *, u_int8_t); + + u_int16_t bios_ctrl; /* BIOS control word, EEPROM word 12 */ + u_int16_t wdtr_able; /* try WDTR for a device */ + u_int16_t sdtr_able; /* try SDTR for a device */ + u_int16_t ultra_able; /* try SDTR Ultra speed for a device */ + u_int16_t sdtr_speed1; /* EEPROM SDTR Speed for TID 0-3 */ + u_int16_t sdtr_speed2; /* EEPROM SDTR Speed for TID 4-7 */ + u_int16_t sdtr_speed3; /* EEPROM SDTR Speed for TID 8-11 */ + u_int16_t sdtr_speed4; /* EEPROM SDTR Speed for TID 12-15 */ + u_int16_t tagqng_able; /* try tagged queuing with a device */ + u_int16_t ppr_able; /* PPR message capable per TID bitmask. */ + u_int16_t start_motor; /* start motor command allowed */ + u_int8_t max_dvc_qng; /* maximum number of tagged commands per device */ + u_int8_t scsi_reset_wait; /* delay in seconds after scsi bus reset */ + u_int8_t chip_no; /* should be assigned by caller */ + u_int8_t max_host_qng; /* maximum number of Q'ed command allowed */ + u_int8_t irq_no; /* IRQ number */ + u_int8_t chip_type; /* chip SCSI target ID */ + u_int16_t no_scam; /* scam_tolerant of EEPROM */ + u_int32_t drv_ptr; /* driver pointer to private structure */ + u_int8_t chip_scsi_id; /* chip SCSI target ID */ + u_int8_t bist_err_code; + u_int16_t carr_pending_cnt; /* Count of pending carriers. */ + struct adw_carrier *carr_freelist; /* Carrier free list. */ + struct adw_carrier *icq_sp; /* Initiator command queue stopper pointer. */ + struct adw_carrier *irq_sp; /* Initiator response queue stopper pointer. */ + /* + * Note: The following fields will not be used after initialization. The + * driver may discard the buffer after initialization is done. + */ + ADW_DVC_CFG cfg; /* temporary configuration structure */ +} ADW_SOFTC; + + +/* * Microcode idle loop commands */ #define IDLE_CMD_COMPLETED 0