ispvar.h (155228) | ispvar.h (155704) |
---|---|
1/* $FreeBSD: head/sys/dev/isp/ispvar.h 155228 2006-02-02 21:31:34Z mjacob $ */ | 1/* $FreeBSD: head/sys/dev/isp/ispvar.h 155704 2006-02-15 00:31:48Z mjacob $ */ |
2/*- 3 * Soft Definitions for for Qlogic ISP SCSI adapters. 4 * 5 * Copyright (c) 1997-2006 by Matthew Jacob 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions --- 17 unchanged lines hidden (view full) --- 27 * SUCH DAMAGE. 28 */ 29 30#ifndef _ISPVAR_H 31#define _ISPVAR_H 32 33#if defined(__NetBSD__) || defined(__OpenBSD__) 34#include <dev/ic/ispmbox.h> | 2/*- 3 * Soft Definitions for for Qlogic ISP SCSI adapters. 4 * 5 * Copyright (c) 1997-2006 by Matthew Jacob 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions --- 17 unchanged lines hidden (view full) --- 27 * SUCH DAMAGE. 28 */ 29 30#ifndef _ISPVAR_H 31#define _ISPVAR_H 32 33#if defined(__NetBSD__) || defined(__OpenBSD__) 34#include <dev/ic/ispmbox.h> |
35#ifdef ISP_TARGET_MODE 36#include <dev/ic/isp_target.h> 37#include <dev/ic/isp_tpublic.h> | |
38#endif | 35#endif |
39#endif | |
40#ifdef __FreeBSD__ 41#include <dev/isp/ispmbox.h> | 36#ifdef __FreeBSD__ 37#include <dev/isp/ispmbox.h> |
42#ifdef ISP_TARGET_MODE 43#include <dev/isp/isp_target.h> 44#include <dev/isp/isp_tpublic.h> | |
45#endif | 38#endif |
46#endif | |
47#ifdef __linux__ 48#include "ispmbox.h" | 39#ifdef __linux__ 40#include "ispmbox.h" |
49#ifdef ISP_TARGET_MODE 50#include "isp_target.h" 51#include "isp_tpublic.h" | |
52#endif | 41#endif |
42#ifdef __svr4__ 43#include "ispmbox.h" |
|
53#endif 54 55#define ISP_CORE_VERSION_MAJOR 2 | 44#endif 45 46#define ISP_CORE_VERSION_MAJOR 2 |
56#define ISP_CORE_VERSION_MINOR 10 | 47#define ISP_CORE_VERSION_MINOR 11 |
57 58/* 59 * Vector for bus specific code to provide specific services. 60 */ | 48 49/* 50 * Vector for bus specific code to provide specific services. 51 */ |
61struct ispsoftc; | 52typedef struct ispsoftc ispsoftc_t; |
62struct ispmdvec { 63 int (*dv_rd_isr) | 53struct ispmdvec { 54 int (*dv_rd_isr) |
64 (struct ispsoftc *, u_int16_t *, u_int16_t *, u_int16_t *); 65 u_int16_t (*dv_rd_reg) (struct ispsoftc *, int); 66 void (*dv_wr_reg) (struct ispsoftc *, int, u_int16_t); 67 int (*dv_mbxdma) (struct ispsoftc *); 68 int (*dv_dmaset) (struct ispsoftc *, 69 XS_T *, ispreq_t *, u_int16_t *, u_int16_t); 70 void (*dv_dmaclr) 71 (struct ispsoftc *, XS_T *, u_int16_t); 72 void (*dv_reset0) (struct ispsoftc *); 73 void (*dv_reset1) (struct ispsoftc *); 74 void (*dv_dregs) (struct ispsoftc *, const char *); 75 u_int16_t *dv_ispfw; /* ptr to f/w */ 76 u_int16_t dv_conf1; 77 u_int16_t dv_clock; /* clock frequency */ | 55 (ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *); 56 uint16_t (*dv_rd_reg) (ispsoftc_t *, int); 57 void (*dv_wr_reg) (ispsoftc_t *, int, uint16_t); 58 int (*dv_mbxdma) (ispsoftc_t *); 59 int (*dv_dmaset) 60 (ispsoftc_t *, XS_T *, ispreq_t *, uint16_t *, uint16_t); 61 void (*dv_dmaclr) (ispsoftc_t *, XS_T *, uint16_t); 62 void (*dv_reset0) (ispsoftc_t *); 63 void (*dv_reset1) (ispsoftc_t *); 64 void (*dv_dregs) (ispsoftc_t *, const char *); 65 uint16_t *dv_ispfw; /* ptr to f/w */ 66 uint16_t dv_conf1; 67 uint16_t dv_clock; /* clock frequency */ |
78}; 79 80/* 81 * Overall parameters 82 */ 83#define MAX_TARGETS 16 84#define MAX_FC_TARG 256 85#define ISP_MAX_TARGETS(isp) (IS_FC(isp)? MAX_FC_TARG : MAX_TARGETS) 86#define ISP_MAX_LUNS(isp) (isp)->isp_maxluns 87 88/* | 68}; 69 70/* 71 * Overall parameters 72 */ 73#define MAX_TARGETS 16 74#define MAX_FC_TARG 256 75#define ISP_MAX_TARGETS(isp) (IS_FC(isp)? MAX_FC_TARG : MAX_TARGETS) 76#define ISP_MAX_LUNS(isp) (isp)->isp_maxluns 77 78/* |
89 * 'Types' 90 */ 91#ifdef ISP_DAC_SUPPORTED 92typedef u_int64_t isp_dma_addr_t; 93#else 94typedef u_int32_t isp_dma_addr_t; 95#endif 96 97/* | |
98 * Macros to access ISP registers through bus specific layers- 99 * mostly wrappers to vector through the mdvec structure. 100 */ 101#define ISP_READ_ISR(isp, isrp, semap, mbox0p) \ 102 (*(isp)->isp_mdvec->dv_rd_isr)(isp, isrp, semap, mbox0p) 103 104#define ISP_READ(isp, reg) \ 105 (*(isp)->isp_mdvec->dv_rd_reg)((isp), (reg)) 106 107#define ISP_WRITE(isp, reg, val) \ 108 (*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), (val)) 109 110#define ISP_MBOXDMASETUP(isp) \ 111 (*(isp)->isp_mdvec->dv_mbxdma)((isp)) 112 113#define ISP_DMASETUP(isp, xs, req, iptrp, optr) \ 114 (*(isp)->isp_mdvec->dv_dmaset)((isp), (xs), (req), (iptrp), (optr)) 115 | 79 * Macros to access ISP registers through bus specific layers- 80 * mostly wrappers to vector through the mdvec structure. 81 */ 82#define ISP_READ_ISR(isp, isrp, semap, mbox0p) \ 83 (*(isp)->isp_mdvec->dv_rd_isr)(isp, isrp, semap, mbox0p) 84 85#define ISP_READ(isp, reg) \ 86 (*(isp)->isp_mdvec->dv_rd_reg)((isp), (reg)) 87 88#define ISP_WRITE(isp, reg, val) \ 89 (*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), (val)) 90 91#define ISP_MBOXDMASETUP(isp) \ 92 (*(isp)->isp_mdvec->dv_mbxdma)((isp)) 93 94#define ISP_DMASETUP(isp, xs, req, iptrp, optr) \ 95 (*(isp)->isp_mdvec->dv_dmaset)((isp), (xs), (req), (iptrp), (optr)) 96 |
116#define ISP_DMAFREE(isp, xs, hndl) \ 117 if ((isp)->isp_mdvec->dv_dmaclr) \ | 97#define ISP_DMAFREE(isp, xs, hndl) \ 98 if ((isp)->isp_mdvec->dv_dmaclr) \ |
118 (*(isp)->isp_mdvec->dv_dmaclr)((isp), (xs), (hndl)) 119 120#define ISP_RESET0(isp) \ 121 if ((isp)->isp_mdvec->dv_reset0) (*(isp)->isp_mdvec->dv_reset0)((isp)) 122#define ISP_RESET1(isp) \ 123 if ((isp)->isp_mdvec->dv_reset1) (*(isp)->isp_mdvec->dv_reset1)((isp)) 124#define ISP_DUMPREGS(isp, m) \ 125 if ((isp)->isp_mdvec->dv_dregs) (*(isp)->isp_mdvec->dv_dregs)((isp),(m)) --- 25 unchanged lines hidden (view full) --- 151/* Both request and result queue length must be a power of two */ 152#define RQUEST_QUEUE_LEN(x) MAXISPREQUEST(x) 153#ifdef ISP_TARGET_MODE 154#define RESULT_QUEUE_LEN(x) MAXISPREQUEST(x) 155#else 156#define RESULT_QUEUE_LEN(x) \ 157 (((MAXISPREQUEST(x) >> 2) < 64)? 64 : MAXISPREQUEST(x) >> 2) 158#endif | 99 (*(isp)->isp_mdvec->dv_dmaclr)((isp), (xs), (hndl)) 100 101#define ISP_RESET0(isp) \ 102 if ((isp)->isp_mdvec->dv_reset0) (*(isp)->isp_mdvec->dv_reset0)((isp)) 103#define ISP_RESET1(isp) \ 104 if ((isp)->isp_mdvec->dv_reset1) (*(isp)->isp_mdvec->dv_reset1)((isp)) 105#define ISP_DUMPREGS(isp, m) \ 106 if ((isp)->isp_mdvec->dv_dregs) (*(isp)->isp_mdvec->dv_dregs)((isp),(m)) --- 25 unchanged lines hidden (view full) --- 132/* Both request and result queue length must be a power of two */ 133#define RQUEST_QUEUE_LEN(x) MAXISPREQUEST(x) 134#ifdef ISP_TARGET_MODE 135#define RESULT_QUEUE_LEN(x) MAXISPREQUEST(x) 136#else 137#define RESULT_QUEUE_LEN(x) \ 138 (((MAXISPREQUEST(x) >> 2) < 64)? 64 : MAXISPREQUEST(x) >> 2) 139#endif |
159#define ISP_QUEUE_ENTRY(q, idx) ((q) + ((idx) * QENTRY_LEN)) | 140#define ISP_QUEUE_ENTRY(q, idx) (((uint8_t *)q) + ((idx) * QENTRY_LEN)) |
160#define ISP_QUEUE_SIZE(n) ((n) * QENTRY_LEN) 161#define ISP_NXT_QENTRY(idx, qlen) (((idx) + 1) & ((qlen)-1)) 162#define ISP_QFREE(in, out, qlen) \ 163 ((in == out)? (qlen - 1) : ((in > out)? \ 164 ((qlen - 1) - (in - out)) : (out - in - 1))) 165#define ISP_QAVAIL(isp) \ 166 ISP_QFREE(isp->isp_reqidx, isp->isp_reqodx, RQUEST_QUEUE_LEN(isp)) 167 168#define ISP_ADD_REQUEST(isp, nxti) \ 169 MEMORYBARRIER(isp, SYNC_REQUEST, isp->isp_reqidx, QENTRY_LEN); \ 170 WRITE_REQUEST_QUEUE_IN_POINTER(isp, nxti); \ 171 isp->isp_reqidx = nxti 172 173/* 174 * SCSI Specific Host Adapter Parameters- per bus, per target 175 */ 176typedef struct { | 141#define ISP_QUEUE_SIZE(n) ((n) * QENTRY_LEN) 142#define ISP_NXT_QENTRY(idx, qlen) (((idx) + 1) & ((qlen)-1)) 143#define ISP_QFREE(in, out, qlen) \ 144 ((in == out)? (qlen - 1) : ((in > out)? \ 145 ((qlen - 1) - (in - out)) : (out - in - 1))) 146#define ISP_QAVAIL(isp) \ 147 ISP_QFREE(isp->isp_reqidx, isp->isp_reqodx, RQUEST_QUEUE_LEN(isp)) 148 149#define ISP_ADD_REQUEST(isp, nxti) \ 150 MEMORYBARRIER(isp, SYNC_REQUEST, isp->isp_reqidx, QENTRY_LEN); \ 151 WRITE_REQUEST_QUEUE_IN_POINTER(isp, nxti); \ 152 isp->isp_reqidx = nxti 153 154/* 155 * SCSI Specific Host Adapter Parameters- per bus, per target 156 */ 157typedef struct { |
177 u_int isp_gotdparms : 1, | 158 uint32_t isp_gotdparms : 1, |
178 isp_req_ack_active_neg : 1, 179 isp_data_line_active_neg: 1, 180 isp_cmd_dma_burst_enable: 1, 181 isp_data_dma_burst_enabl: 1, 182 isp_fifo_threshold : 3, 183 isp_ultramode : 1, 184 isp_diffmode : 1, 185 isp_lvdmode : 1, 186 isp_fast_mttr : 1, /* fast sram */ 187 isp_initiator_id : 4, 188 isp_async_data_setup : 4; | 159 isp_req_ack_active_neg : 1, 160 isp_data_line_active_neg: 1, 161 isp_cmd_dma_burst_enable: 1, 162 isp_data_dma_burst_enabl: 1, 163 isp_fifo_threshold : 3, 164 isp_ultramode : 1, 165 isp_diffmode : 1, 166 isp_lvdmode : 1, 167 isp_fast_mttr : 1, /* fast sram */ 168 isp_initiator_id : 4, 169 isp_async_data_setup : 4; |
189 u_int16_t isp_selection_timeout; 190 u_int16_t isp_max_queue_depth; 191 u_int8_t isp_tag_aging; 192 u_int8_t isp_bus_reset_delay; 193 u_int8_t isp_retry_count; 194 u_int8_t isp_retry_delay; | 170 uint16_t isp_selection_timeout; 171 uint16_t isp_max_queue_depth; 172 uint8_t isp_tag_aging; 173 uint8_t isp_bus_reset_delay; 174 uint8_t isp_retry_count; 175 uint8_t isp_retry_delay; |
195 struct { | 176 struct { |
196 u_int32_t | 177 uint32_t |
197 exc_throttle : 8, 198 : 1, 199 dev_enable : 1, /* ignored */ 200 dev_update : 1, 201 dev_refresh : 1, 202 actv_offset : 4, 203 goal_offset : 4, 204 nvrm_offset : 4; | 178 exc_throttle : 8, 179 : 1, 180 dev_enable : 1, /* ignored */ 181 dev_update : 1, 182 dev_refresh : 1, 183 actv_offset : 4, 184 goal_offset : 4, 185 nvrm_offset : 4; |
205 u_int8_t actv_period; /* current sync period */ 206 u_int8_t goal_period; /* goal sync period */ 207 u_int8_t nvrm_period; /* nvram sync period */ 208 u_int16_t actv_flags; /* current device flags */ 209 u_int16_t goal_flags; /* goal device flags */ 210 u_int16_t nvrm_flags; /* nvram device flags */ | 186 uint8_t actv_period; /* current sync period */ 187 uint8_t goal_period; /* goal sync period */ 188 uint8_t nvrm_period; /* nvram sync period */ 189 uint16_t actv_flags; /* current device flags */ 190 uint16_t goal_flags; /* goal device flags */ 191 uint16_t nvrm_flags; /* nvram device flags */ |
211 } isp_devparam[MAX_TARGETS]; 212} sdparam; 213 214/* 215 * Device Flags 216 */ 217#define DPARM_DISC 0x8000 218#define DPARM_PARITY 0x4000 --- 27 unchanged lines hidden (view full) --- 246#define FC_SNS_ID 0x80 /* SNS Server Special ID */ 247 248/* #define ISP_USE_GA_NXT 1 */ /* Use GA_NXT with switches */ 249#ifndef GA_NXT_MAX 250#define GA_NXT_MAX 256 251#endif 252 253typedef struct { | 192 } isp_devparam[MAX_TARGETS]; 193} sdparam; 194 195/* 196 * Device Flags 197 */ 198#define DPARM_DISC 0x8000 199#define DPARM_PARITY 0x4000 --- 27 unchanged lines hidden (view full) --- 227#define FC_SNS_ID 0x80 /* SNS Server Special ID */ 228 229/* #define ISP_USE_GA_NXT 1 */ /* Use GA_NXT with switches */ 230#ifndef GA_NXT_MAX 231#define GA_NXT_MAX 256 232#endif 233 234typedef struct { |
254 u_int32_t : 13, | 235 uint32_t : 13, |
255 isp_gbspeed : 3, 256 : 2, 257 isp_iid_set : 1, 258 loop_seen_once : 1, 259 isp_loopstate : 4, /* Current Loop State */ 260 isp_fwstate : 3, /* ISP F/W state */ 261 isp_gotdparms : 1, 262 isp_topo : 3, 263 isp_onfabric : 1; | 236 isp_gbspeed : 3, 237 : 2, 238 isp_iid_set : 1, 239 loop_seen_once : 1, 240 isp_loopstate : 4, /* Current Loop State */ 241 isp_fwstate : 3, /* ISP F/W state */ 242 isp_gotdparms : 1, 243 isp_topo : 3, 244 isp_onfabric : 1; |
264 u_int32_t : 8, | 245 uint32_t : 8, |
265 isp_portid : 24; /* S_ID */ | 246 isp_portid : 24; /* S_ID */ |
266 u_int16_t isp_fwoptions; 267 u_int16_t isp_iid; /* 'initiator' id */ 268 u_int16_t isp_loopid; /* hard loop id */ 269 u_int16_t isp_fwattr; /* firmware attributes */ 270 u_int8_t isp_execthrottle; 271 u_int8_t isp_retry_delay; 272 u_int8_t isp_retry_count; 273 u_int8_t isp_reserved; 274 u_int16_t isp_maxalloc; 275 u_int16_t isp_maxfrmlen; 276 u_int64_t isp_nodewwn; 277 u_int64_t isp_portwwn; | 247 uint16_t isp_fwoptions; 248 uint16_t isp_iid; /* 'initiator' id */ 249 uint16_t isp_loopid; /* hard loop id */ 250 uint16_t isp_fwattr; /* firmware attributes */ 251 uint8_t isp_execthrottle; 252 uint8_t isp_retry_delay; 253 uint8_t isp_retry_count; 254 uint8_t isp_reserved; 255 uint16_t isp_maxalloc; 256 uint16_t isp_maxfrmlen; 257 uint64_t isp_nodewwn; 258 uint64_t isp_portwwn; |
278 /* 279 * Port Data Base. This is indexed by 'target', which is invariate. 280 * However, elements within can move around due to loop changes, 281 * so the actual loop ID passed to the F/W is in this structure. 282 * The first time the loop is seen up, loopid will match the index 283 * (except for fabric nodes which are above mapped above FC_SNS_ID 284 * and are completely virtual), but subsequent LIPs can cause things 285 * to move around. 286 */ 287 struct lportdb { | 259 /* 260 * Port Data Base. This is indexed by 'target', which is invariate. 261 * However, elements within can move around due to loop changes, 262 * so the actual loop ID passed to the F/W is in this structure. 263 * The first time the loop is seen up, loopid will match the index 264 * (except for fabric nodes which are above mapped above FC_SNS_ID 265 * and are completely virtual), but subsequent LIPs can cause things 266 * to move around. 267 */ 268 struct lportdb { |
288 u_int32_t loopid : 16, | 269 uint32_t loopid : 16, |
289 : 2, 290 fc4_type : 4, 291 last_fabric_dev : 1, 292 relogin : 1, 293 force_logout : 1, 294 was_fabric_dev : 1, 295 fabric_dev : 1, 296 loggedin : 1, 297 roles : 2, 298 tvalid : 1, 299 valid : 1; | 270 : 2, 271 fc4_type : 4, 272 last_fabric_dev : 1, 273 relogin : 1, 274 force_logout : 1, 275 was_fabric_dev : 1, 276 fabric_dev : 1, 277 loggedin : 1, 278 roles : 2, 279 tvalid : 1, 280 valid : 1; |
300 u_int32_t port_type : 8, | 281 uint32_t port_type : 8, |
301 portid : 24; | 282 portid : 24; |
302 u_int64_t node_wwn; 303 u_int64_t port_wwn; | 283 uint64_t node_wwn; 284 uint64_t port_wwn; |
304 } portdb[MAX_FC_TARG], tport[FC_PORT_ID]; 305 306 /* 307 * Scratch DMA mapped in area to fetch Port Database stuff, etc. 308 */ | 285 } portdb[MAX_FC_TARG], tport[FC_PORT_ID]; 286 287 /* 288 * Scratch DMA mapped in area to fetch Port Database stuff, etc. 289 */ |
309 caddr_t isp_scratch; 310 isp_dma_addr_t isp_scdma; | 290 void * isp_scratch; 291 XS_DMA_ADDR_T isp_scdma; |
311#ifdef ISP_FW_CRASH_DUMP | 292#ifdef ISP_FW_CRASH_DUMP |
312 u_int16_t *isp_dump_data; | 293 uint16_t * isp_dump_data; |
313#endif 314} fcparam; 315 316#define FW_CONFIG_WAIT 0 317#define FW_WAIT_AL_PA 1 318#define FW_WAIT_LOGIN 2 319#define FW_READY 3 320#define FW_LOSS_OF_SYNC 4 --- 15 unchanged lines hidden (view full) --- 336#define TOPO_FL_PORT 1 337#define TOPO_N_PORT 2 338#define TOPO_F_PORT 3 339#define TOPO_PTP_STUB 4 340 341/* 342 * Soft Structure per host adapter 343 */ | 294#endif 295} fcparam; 296 297#define FW_CONFIG_WAIT 0 298#define FW_WAIT_AL_PA 1 299#define FW_WAIT_LOGIN 2 300#define FW_READY 3 301#define FW_LOSS_OF_SYNC 4 --- 15 unchanged lines hidden (view full) --- 317#define TOPO_FL_PORT 1 318#define TOPO_N_PORT 2 319#define TOPO_F_PORT 3 320#define TOPO_PTP_STUB 4 321 322/* 323 * Soft Structure per host adapter 324 */ |
344typedef struct ispsoftc { | 325struct ispsoftc { |
345 /* 346 * Platform (OS) specific data 347 */ 348 struct isposinfo isp_osinfo; 349 350 /* 351 * Pointer to bus specific functions and data 352 */ 353 struct ispmdvec * isp_mdvec; 354 355 /* 356 * (Mostly) nonvolatile state. Board specific parameters 357 * may contain some volatile state (e.g., current loop state). 358 */ 359 360 void * isp_param; /* type specific */ | 326 /* 327 * Platform (OS) specific data 328 */ 329 struct isposinfo isp_osinfo; 330 331 /* 332 * Pointer to bus specific functions and data 333 */ 334 struct ispmdvec * isp_mdvec; 335 336 /* 337 * (Mostly) nonvolatile state. Board specific parameters 338 * may contain some volatile state (e.g., current loop state). 339 */ 340 341 void * isp_param; /* type specific */ |
361 u_int16_t isp_fwrev[3]; /* Loaded F/W revision */ 362 u_int16_t isp_romfw_rev[3]; /* PROM F/W revision */ 363 u_int16_t isp_maxcmds; /* max possible I/O cmds */ 364 u_int8_t isp_type; /* HBA Chip Type */ 365 u_int8_t isp_revision; /* HBA Chip H/W Revision */ 366 u_int32_t isp_maxluns; /* maximum luns supported */ | 342 uint16_t isp_fwrev[3]; /* Loaded F/W revision */ 343 uint16_t isp_romfw_rev[3]; /* PROM F/W revision */ 344 uint16_t isp_maxcmds; /* max possible I/O cmds */ 345 uint8_t isp_type; /* HBA Chip Type */ 346 uint8_t isp_revision; /* HBA Chip H/W Revision */ 347 uint32_t isp_maxluns; /* maximum luns supported */ |
367 | 348 |
368 u_int32_t isp_clock : 8, /* input clock */ | 349 uint32_t isp_clock : 8, /* input clock */ |
369 : 4, 370 isp_port : 1, /* 23XX only */ 371 isp_failed : 1, /* board failed */ 372 isp_open : 1, /* opened (ioctl) */ 373 isp_touched : 1, /* board ever seen? */ 374 isp_bustype : 1, /* SBus or PCI */ 375 isp_loaded_fw : 1, /* loaded firmware */ 376 isp_role : 2, /* roles supported */ 377 isp_dblev : 12; /* debug log mask */ 378 | 350 : 4, 351 isp_port : 1, /* 23XX only */ 352 isp_failed : 1, /* board failed */ 353 isp_open : 1, /* opened (ioctl) */ 354 isp_touched : 1, /* board ever seen? */ 355 isp_bustype : 1, /* SBus or PCI */ 356 isp_loaded_fw : 1, /* loaded firmware */ 357 isp_role : 2, /* roles supported */ 358 isp_dblev : 12; /* debug log mask */ 359 |
379 u_int32_t isp_confopts; /* config options */ | 360 uint32_t isp_confopts; /* config options */ |
380 | 361 |
381 u_int16_t isp_rqstinrp; /* register for REQINP */ 382 u_int16_t isp_rqstoutrp; /* register for REQOUTP */ 383 u_int16_t isp_respinrp; /* register for RESINP */ 384 u_int16_t isp_respoutrp; /* register for RESOUTP */ | 362 uint16_t isp_rqstinrp; /* register for REQINP */ 363 uint16_t isp_rqstoutrp; /* register for REQOUTP */ 364 uint16_t isp_respinrp; /* register for RESINP */ 365 uint16_t isp_respoutrp; /* register for RESOUTP */ |
385 386 /* 387 * Instrumentation 388 */ | 366 367 /* 368 * Instrumentation 369 */ |
389 u_int64_t isp_intcnt; /* total int count */ 390 u_int64_t isp_intbogus; /* spurious int count */ 391 u_int64_t isp_intmboxc; /* mbox completions */ 392 u_int64_t isp_intoasync; /* other async */ 393 u_int64_t isp_rsltccmplt; /* CMDs on result q */ 394 u_int64_t isp_fphccmplt; /* CMDs via fastpost */ 395 u_int16_t isp_rscchiwater; 396 u_int16_t isp_fpcchiwater; | 370 uint64_t isp_intcnt; /* total int count */ 371 uint64_t isp_intbogus; /* spurious int count */ 372 uint64_t isp_intmboxc; /* mbox completions */ 373 uint64_t isp_intoasync; /* other async */ 374 uint64_t isp_rsltccmplt; /* CMDs on result q */ 375 uint64_t isp_fphccmplt; /* CMDs via fastpost */ 376 uint16_t isp_rscchiwater; 377 uint16_t isp_fpcchiwater; |
397 398 /* 399 * Volatile state 400 */ 401 | 378 379 /* 380 * Volatile state 381 */ 382 |
402 volatile u_int32_t | 383 volatile uint32_t |
403 isp_obits : 8, /* mailbox command output */ 404 isp_mboxbsy : 1, /* mailbox command active */ 405 isp_state : 3, 406 isp_sendmarker : 2, /* send a marker entry */ 407 isp_update : 2, /* update parameters */ 408 isp_nactive : 16; /* how many commands active */ | 384 isp_obits : 8, /* mailbox command output */ 385 isp_mboxbsy : 1, /* mailbox command active */ 386 isp_state : 3, 387 isp_sendmarker : 2, /* send a marker entry */ 388 isp_update : 2, /* update parameters */ 389 isp_nactive : 16; /* how many commands active */ |
409 volatile u_int16_t isp_reqodx; /* index of last ISP pickup */ 410 volatile u_int16_t isp_reqidx; /* index of next request */ 411 volatile u_int16_t isp_residx; /* index of next result */ 412 volatile u_int16_t isp_resodx; /* index of next result */ 413 volatile u_int16_t isp_rspbsy; 414 volatile u_int16_t isp_lasthdls; /* last handle seed */ 415 volatile u_int16_t isp_mboxtmp[MAILBOX_STORAGE]; 416 volatile u_int16_t isp_lastmbxcmd; /* last mbox command sent */ 417 volatile u_int16_t isp_mbxwrk0; 418 volatile u_int16_t isp_mbxwrk1; 419 volatile u_int16_t isp_mbxwrk2; | 390 volatile uint16_t isp_reqodx; /* index of last ISP pickup */ 391 volatile uint16_t isp_reqidx; /* index of next request */ 392 volatile uint16_t isp_residx; /* index of next result */ 393 volatile uint16_t isp_resodx; /* index of next result */ 394 volatile uint16_t isp_rspbsy; 395 volatile uint16_t isp_lasthdls; /* last handle seed */ 396 volatile uint16_t isp_mboxtmp[MAILBOX_STORAGE]; 397 volatile uint16_t isp_lastmbxcmd; /* last mbox command sent */ 398 volatile uint16_t isp_mbxwrk0; 399 volatile uint16_t isp_mbxwrk1; 400 volatile uint16_t isp_mbxwrk2; |
420 void * isp_mbxworkp; 421 422 /* 423 * Active commands are stored here, indexed by handle functions. 424 */ 425 XS_T **isp_xflist; 426 427#ifdef ISP_TARGET_MODE 428 /* 429 * Active target commands are stored here, indexed by handle function. 430 */ 431 void **isp_tgtlist; 432#endif 433 434 /* 435 * request/result queue pointers and DMA handles for them. 436 */ | 401 void * isp_mbxworkp; 402 403 /* 404 * Active commands are stored here, indexed by handle functions. 405 */ 406 XS_T **isp_xflist; 407 408#ifdef ISP_TARGET_MODE 409 /* 410 * Active target commands are stored here, indexed by handle function. 411 */ 412 void **isp_tgtlist; 413#endif 414 415 /* 416 * request/result queue pointers and DMA handles for them. 417 */ |
437 caddr_t isp_rquest; 438 caddr_t isp_result; 439 isp_dma_addr_t isp_rquest_dma; 440 isp_dma_addr_t isp_result_dma; 441} ispsoftc_t; | 418 void * isp_rquest; 419 void * isp_result; 420 XS_DMA_ADDR_T isp_rquest_dma; 421 XS_DMA_ADDR_T isp_result_dma; 422}; |
442 443#define SDPARAM(isp) ((sdparam *) (isp)->isp_param) 444#define FCPARAM(isp) ((fcparam *) (isp)->isp_param) 445 446/* 447 * ISP Driver Run States 448 */ 449#define ISP_NILSTATE 0 --- 124 unchanged lines hidden (view full) --- 574#define IS_2200(isp) ((isp)->isp_type == ISP_HA_FC_2200) 575#define IS_23XX(isp) ((isp)->isp_type >= ISP_HA_FC_2300) 576#define IS_2300(isp) ((isp)->isp_type == ISP_HA_FC_2300) 577#define IS_2312(isp) ((isp)->isp_type == ISP_HA_FC_2312) 578#define IS_2322(isp) ((isp)->isp_type == ISP_HA_FC_2322) 579#define IS_24XX(isp) ((isp)->isp_type >= ISP_HA_FC_2400) 580 581/* | 423 424#define SDPARAM(isp) ((sdparam *) (isp)->isp_param) 425#define FCPARAM(isp) ((fcparam *) (isp)->isp_param) 426 427/* 428 * ISP Driver Run States 429 */ 430#define ISP_NILSTATE 0 --- 124 unchanged lines hidden (view full) --- 555#define IS_2200(isp) ((isp)->isp_type == ISP_HA_FC_2200) 556#define IS_23XX(isp) ((isp)->isp_type >= ISP_HA_FC_2300) 557#define IS_2300(isp) ((isp)->isp_type == ISP_HA_FC_2300) 558#define IS_2312(isp) ((isp)->isp_type == ISP_HA_FC_2312) 559#define IS_2322(isp) ((isp)->isp_type == ISP_HA_FC_2322) 560#define IS_24XX(isp) ((isp)->isp_type >= ISP_HA_FC_2400) 561 562/* |
582 * DMA cookie macros | 563 * DMA related macros |
583 */ | 564 */ |
584#ifdef ISP_DAC_SUPPORTRED 585#define DMA_WD3(x) (((x) >> 48) & 0xffff) 586#define DMA_WD2(x) (((x) >> 32) & 0xffff) 587#else 588#define DMA_WD3(x) 0 589#define DMA_WD2(x) 0 590#endif | 565#define DMA_WD3(x) ((((uint64_t)x) >> 48) & 0xffff) 566#define DMA_WD2(x) ((((uint64_t)x) >> 32) & 0xffff) |
591#define DMA_WD1(x) (((x) >> 16) & 0xffff) 592#define DMA_WD0(x) (((x) & 0xffff)) 593 | 567#define DMA_WD1(x) (((x) >> 16) & 0xffff) 568#define DMA_WD0(x) (((x) & 0xffff)) 569 |
570#define DMA_LO32(x) ((uint32_t) (x)) 571#define DMA_HI32(x) ((uint32_t)(((uint64_t)x) >> 32)) 572 |
|
594/* 595 * Core System Function Prototypes 596 */ 597 598/* 599 * Reset Hardware. Totally. Assumes that you'll follow this with 600 * a call to isp_init. 601 */ | 573/* 574 * Core System Function Prototypes 575 */ 576 577/* 578 * Reset Hardware. Totally. Assumes that you'll follow this with 579 * a call to isp_init. 580 */ |
602void isp_reset(struct ispsoftc *); | 581void isp_reset(ispsoftc_t *); |
603 604/* 605 * Initialize Hardware to known state 606 */ | 582 583/* 584 * Initialize Hardware to known state 585 */ |
607void isp_init(struct ispsoftc *); | 586void isp_init(ispsoftc_t *); |
608 609/* 610 * Reset the ISP and call completion for any orphaned commands. 611 */ | 587 588/* 589 * Reset the ISP and call completion for any orphaned commands. 590 */ |
612void isp_reinit(struct ispsoftc *); | 591void isp_reinit(ispsoftc_t *); |
613 614#ifdef ISP_FW_CRASH_DUMP 615/* 616 * Dump firmware entry point. 617 */ | 592 593#ifdef ISP_FW_CRASH_DUMP 594/* 595 * Dump firmware entry point. 596 */ |
618void isp_fw_dump(struct ispsoftc *isp); | 597void isp_fw_dump(ispsoftc_t *isp); |
619#endif 620 621/* 622 * Internal Interrupt Service Routine 623 * 624 * The outer layers do the spade work to get the appropriate status register, 625 * semaphore register and first mailbox register (if appropriate). This also 626 * means that most spurious/bogus interrupts not for us can be filtered first. 627 */ | 598#endif 599 600/* 601 * Internal Interrupt Service Routine 602 * 603 * The outer layers do the spade work to get the appropriate status register, 604 * semaphore register and first mailbox register (if appropriate). This also 605 * means that most spurious/bogus interrupts not for us can be filtered first. 606 */ |
628void isp_intr(struct ispsoftc *, u_int16_t, u_int16_t, u_int16_t); | 607void isp_intr(ispsoftc_t *, uint16_t, uint16_t, uint16_t); |
629 630 631/* 632 * Command Entry Point- Platform Dependent layers call into this 633 */ 634int isp_start(XS_T *); | 608 609 610/* 611 * Command Entry Point- Platform Dependent layers call into this 612 */ 613int isp_start(XS_T *); |
614 |
|
635/* these values are what isp_start returns */ 636#define CMD_COMPLETE 101 /* command completed */ 637#define CMD_EAGAIN 102 /* busy- maybe retry later */ 638#define CMD_QUEUED 103 /* command has been queued for execution */ 639#define CMD_RQLATER 104 /* requeue this command later */ 640 641/* 642 * Command Completion Point- Core layers call out from this with completed cmds --- 44 unchanged lines hidden (view full) --- 687 ISPCTL_SCAN_LOOP, /* (Re)scan Local Loop */ 688 ISPCTL_PDB_SYNC, /* Synchronize Port Database */ 689 ISPCTL_SEND_LIP, /* Send a LIP */ 690 ISPCTL_GET_POSMAP, /* Get FC-AL position map */ 691 ISPCTL_RUN_MBOXCMD, /* run a mailbox command */ 692 ISPCTL_TOGGLE_TMODE, /* toggle target mode */ 693 ISPCTL_GET_PDB /* get a single port database entry */ 694} ispctl_t; | 615/* these values are what isp_start returns */ 616#define CMD_COMPLETE 101 /* command completed */ 617#define CMD_EAGAIN 102 /* busy- maybe retry later */ 618#define CMD_QUEUED 103 /* command has been queued for execution */ 619#define CMD_RQLATER 104 /* requeue this command later */ 620 621/* 622 * Command Completion Point- Core layers call out from this with completed cmds --- 44 unchanged lines hidden (view full) --- 667 ISPCTL_SCAN_LOOP, /* (Re)scan Local Loop */ 668 ISPCTL_PDB_SYNC, /* Synchronize Port Database */ 669 ISPCTL_SEND_LIP, /* Send a LIP */ 670 ISPCTL_GET_POSMAP, /* Get FC-AL position map */ 671 ISPCTL_RUN_MBOXCMD, /* run a mailbox command */ 672 ISPCTL_TOGGLE_TMODE, /* toggle target mode */ 673 ISPCTL_GET_PDB /* get a single port database entry */ 674} ispctl_t; |
695int isp_control(struct ispsoftc *, ispctl_t, void *); | 675int isp_control(ispsoftc_t *, ispctl_t, void *); |
696 697 698/* 699 * Platform Dependent to Internal to External Control Function 700 * (each platform must provide such a function) 701 * 702 * Assumes locks are held. 703 * --- 44 unchanged lines hidden (view full) --- 748 ISPASYNC_TARGET_NOTIFY, /* target asynchronous notification event */ 749 ISPASYNC_TARGET_ACTION, /* target action requested */ 750 ISPASYNC_CONF_CHANGE, /* Platform Configuration Change */ 751 ISPASYNC_UNHANDLED_RESPONSE, /* Unhandled Response Entry */ 752 ISPASYNC_FW_CRASH, /* Firmware has crashed */ 753 ISPASYNC_FW_DUMPED, /* Firmware crashdump taken */ 754 ISPASYNC_FW_RESTARTED /* Firmware has been restarted */ 755} ispasync_t; | 676 677 678/* 679 * Platform Dependent to Internal to External Control Function 680 * (each platform must provide such a function) 681 * 682 * Assumes locks are held. 683 * --- 44 unchanged lines hidden (view full) --- 728 ISPASYNC_TARGET_NOTIFY, /* target asynchronous notification event */ 729 ISPASYNC_TARGET_ACTION, /* target action requested */ 730 ISPASYNC_CONF_CHANGE, /* Platform Configuration Change */ 731 ISPASYNC_UNHANDLED_RESPONSE, /* Unhandled Response Entry */ 732 ISPASYNC_FW_CRASH, /* Firmware has crashed */ 733 ISPASYNC_FW_DUMPED, /* Firmware crashdump taken */ 734 ISPASYNC_FW_RESTARTED /* Firmware has been restarted */ 735} ispasync_t; |
756int isp_async(struct ispsoftc *, ispasync_t, void *); | 736int isp_async(ispsoftc_t *, ispasync_t, void *); |
757 758#define ISPASYNC_CHANGE_PDB ((void *) 0) 759#define ISPASYNC_CHANGE_SNS ((void *) 1) 760#define ISPASYNC_CHANGE_OTHER ((void *) 2) 761 762/* 763 * Platform Dependent Error and Debug Printout 764 * 765 * Generally this is: 766 * | 737 738#define ISPASYNC_CHANGE_PDB ((void *) 0) 739#define ISPASYNC_CHANGE_SNS ((void *) 1) 740#define ISPASYNC_CHANGE_OTHER ((void *) 2) 741 742/* 743 * Platform Dependent Error and Debug Printout 744 * 745 * Generally this is: 746 * |
767 * void isp_prt(struct ispsoftc *, int level, const char *, ...) | 747 * void isp_prt(ispsoftc_t *, int level, const char *, ...) |
768 * 769 * but due to compiler differences on different platforms this won't be 770 * formally done here. Instead, it goes in each platform definition file. 771 */ 772 773#define ISP_LOGALL 0x0 /* log always */ 774#define ISP_LOGCONFIG 0x1 /* log configuration messages */ 775#define ISP_LOGINFO 0x2 /* log informational messages */ --- 10 unchanged lines hidden (view full) --- 786 787/* 788 * Each Platform provides it's own isposinfo substructure of the ispsoftc 789 * defined above. 790 * 791 * Each platform must also provide the following macros/defines: 792 * 793 * | 748 * 749 * but due to compiler differences on different platforms this won't be 750 * formally done here. Instead, it goes in each platform definition file. 751 */ 752 753#define ISP_LOGALL 0x0 /* log always */ 754#define ISP_LOGCONFIG 0x1 /* log configuration messages */ 755#define ISP_LOGINFO 0x2 /* log informational messages */ --- 10 unchanged lines hidden (view full) --- 766 767/* 768 * Each Platform provides it's own isposinfo substructure of the ispsoftc 769 * defined above. 770 * 771 * Each platform must also provide the following macros/defines: 772 * 773 * |
794 * ISP_DAC_SUPPORTED - Is DAC (Dual Address Cycle) is supported? 795 * Basically means whether or not DMA for PCI 796 * PCI cards (Ultra2 or better or FC) works 797 * above 4GB. 798 * | |
799 * ISP2100_SCRLEN - length for the Fibre Channel scratch DMA area 800 * 801 * MEMZERO(dst, src) platform zeroing function 802 * MEMCPY(dst, src, count) platform copying function 803 * SNPRINTF(buf, bufsize, fmt, ...) snprintf 804 * USEC_DELAY(usecs) microsecond spindelay function 805 * USEC_SLEEP(isp, usecs) microsecond sleep function 806 * 807 * NANOTIME_T nanosecond time type 808 * 809 * GET_NANOTIME(NANOTIME_T *) get current nanotime. 810 * | 774 * ISP2100_SCRLEN - length for the Fibre Channel scratch DMA area 775 * 776 * MEMZERO(dst, src) platform zeroing function 777 * MEMCPY(dst, src, count) platform copying function 778 * SNPRINTF(buf, bufsize, fmt, ...) snprintf 779 * USEC_DELAY(usecs) microsecond spindelay function 780 * USEC_SLEEP(isp, usecs) microsecond sleep function 781 * 782 * NANOTIME_T nanosecond time type 783 * 784 * GET_NANOTIME(NANOTIME_T *) get current nanotime. 785 * |
811 * GET_NANOSEC(NANOTIME_T *) get u_int64_t from NANOTIME_T | 786 * GET_NANOSEC(NANOTIME_T *) get uint64_t from NANOTIME_T |
812 * 813 * NANOTIME_SUB(NANOTIME_T *, NANOTIME_T *) 814 * subtract two NANOTIME_T values 815 * 816 * | 787 * 788 * NANOTIME_SUB(NANOTIME_T *, NANOTIME_T *) 789 * subtract two NANOTIME_T values 790 * 791 * |
817 * MAXISPREQUEST(struct ispsoftc *) maximum request queue size | 792 * MAXISPREQUEST(ispsoftc_t *) maximum request queue size |
818 * for this particular board type 819 * | 793 * for this particular board type 794 * |
820 * MEMORYBARRIER(struct ispsoftc *, barrier_type, offset, size) | 795 * MEMORYBARRIER(ispsoftc_t *, barrier_type, offset, size) |
821 * 822 * Function/Macro the provides memory synchronization on 823 * various objects so that the ISP's and the system's view 824 * of the same object is consistent. 825 * | 796 * 797 * Function/Macro the provides memory synchronization on 798 * various objects so that the ISP's and the system's view 799 * of the same object is consistent. 800 * |
826 * MBOX_ACQUIRE(struct ispsoftc *) acquire lock on mailbox regs 827 * MBOX_WAIT_COMPLETE(struct ispsoftc *) wait for mailbox cmd to be done 828 * MBOX_NOTIFY_COMPLETE(struct ispsoftc *) notification of mbox cmd donee 829 * MBOX_RELEASE(struct ispsoftc *) release lock on mailbox regs | 801 * MBOX_ACQUIRE(ispsoftc_t *) acquire lock on mailbox regs 802 * MBOX_WAIT_COMPLETE(ispsoftc_t *) wait for mailbox cmd to be done 803 * MBOX_NOTIFY_COMPLETE(ispsoftc_t *) notification of mbox cmd donee 804 * MBOX_RELEASE(ispsoftc_t *) release lock on mailbox regs |
830 * | 805 * |
831 * FC_SCRATCH_ACQUIRE(struct ispsoftc *) acquire lock on FC scratch area 832 * FC_SCRATCH_RELEASE(struct ispsoftc *) acquire lock on FC scratch area | 806 * FC_SCRATCH_ACQUIRE(ispsoftc_t *) acquire lock on FC scratch area 807 * FC_SCRATCH_RELEASE(ispsoftc_t *) acquire lock on FC scratch area |
833 * 834 * SCSI_GOOD SCSI 'Good' Status 835 * SCSI_CHECK SCSI 'Check Condition' Status 836 * SCSI_BUSY SCSI 'Busy' Status 837 * SCSI_QFULL SCSI 'Queue Full' Status 838 * 839 * XS_T Platform SCSI transaction type (i.e., command for HBA) | 808 * 809 * SCSI_GOOD SCSI 'Good' Status 810 * SCSI_CHECK SCSI 'Check Condition' Status 811 * SCSI_BUSY SCSI 'Busy' Status 812 * SCSI_QFULL SCSI 'Queue Full' Status 813 * 814 * XS_T Platform SCSI transaction type (i.e., command for HBA) |
815 * XS_DMA_ADDR_T Platform PCI DMA Address Type |
|
840 * XS_ISP(xs) gets an instance out of an XS_T 841 * XS_CHANNEL(xs) gets the channel (bus # for DUALBUS cards) "" 842 * XS_TGT(xs) gets the target "" 843 * XS_LUN(xs) gets the lun "" 844 * XS_CDBP(xs) gets a pointer to the scsi CDB "" 845 * XS_CDBLEN(xs) gets the CDB's length "" 846 * XS_XFRLEN(xs) gets the associated data transfer length "" 847 * XS_TIME(xs) gets the time (in milliseconds) for this command --- 21 unchanged lines hidden (view full) --- 869 * XS_INITERR(xs) initialize error state 870 * 871 * XS_SAVE_SENSE(xs, sp) save sense data 872 * 873 * XS_SET_STATE_STAT(isp, sp, xs) platform dependent interpreter of 874 * response queue entry status bits 875 * 876 * | 816 * XS_ISP(xs) gets an instance out of an XS_T 817 * XS_CHANNEL(xs) gets the channel (bus # for DUALBUS cards) "" 818 * XS_TGT(xs) gets the target "" 819 * XS_LUN(xs) gets the lun "" 820 * XS_CDBP(xs) gets a pointer to the scsi CDB "" 821 * XS_CDBLEN(xs) gets the CDB's length "" 822 * XS_XFRLEN(xs) gets the associated data transfer length "" 823 * XS_TIME(xs) gets the time (in milliseconds) for this command --- 21 unchanged lines hidden (view full) --- 845 * XS_INITERR(xs) initialize error state 846 * 847 * XS_SAVE_SENSE(xs, sp) save sense data 848 * 849 * XS_SET_STATE_STAT(isp, sp, xs) platform dependent interpreter of 850 * response queue entry status bits 851 * 852 * |
877 * DEFAULT_IID(struct ispsoftc *) Default SCSI initiator ID 878 * DEFAULT_LOOPID(struct ispsoftc *) Default FC Loop ID 879 * DEFAULT_NODEWWN(struct ispsoftc *) Default Node WWN 880 * DEFAULT_PORTWWN(struct ispsoftc *) Default Port WWN 881 * DEFAULT_FRAMESIZE(struct ispsoftc *) Default Frame Size 882 * DEFAULT_EXEC_THROTTLE(struct ispsoftc *) Default Execution Throttle | 853 * DEFAULT_IID(ispsoftc_t *) Default SCSI initiator ID 854 * DEFAULT_LOOPID(ispsoftc_t *) Default FC Loop ID 855 * DEFAULT_NODEWWN(ispsoftc_t *) Default Node WWN 856 * DEFAULT_PORTWWN(ispsoftc_t *) Default Port WWN 857 * DEFAULT_FRAMESIZE(ispsoftc_t *) Default Frame Size 858 * DEFAULT_EXEC_THROTTLE(ispsoftc_t *) Default Execution Throttle |
883 * These establish reasonable defaults for each platform. 884 * These must be available independent of card NVRAM and are 885 * to be used should NVRAM not be readable. 886 * | 859 * These establish reasonable defaults for each platform. 860 * These must be available independent of card NVRAM and are 861 * to be used should NVRAM not be readable. 862 * |
887 * ISP_NODEWWN(struct ispsoftc *) FC Node WWN to use 888 * ISP_PORTWWN(struct ispsoftc *) FC Port WWN to use | 863 * ISP_NODEWWN(ispsoftc_t *) FC Node WWN to use 864 * ISP_PORTWWN(ispsoftc_t *) FC Port WWN to use |
889 * 890 * These are to be used after NVRAM is read. The tags 891 * in fcparam.isp_{node,port}wwn reflect the values 892 * read from NVRAM (possibly corrected for card botches). 893 * Each platform can take that information and override 894 * it or ignore and return the Node and Port WWNs to be 895 * used when sending the Qlogic f/w the Initialization Control 896 * Block. 897 * 898 * (XXX these do endian specific transformations- in transition XXX) 899 * | 865 * 866 * These are to be used after NVRAM is read. The tags 867 * in fcparam.isp_{node,port}wwn reflect the values 868 * read from NVRAM (possibly corrected for card botches). 869 * Each platform can take that information and override 870 * it or ignore and return the Node and Port WWNs to be 871 * used when sending the Qlogic f/w the Initialization Control 872 * Block. 873 * 874 * (XXX these do endian specific transformations- in transition XXX) 875 * |
900 * ISP_IOXPUT_8(struct ispsoftc *, u_int8_t srcval, u_int8_t *dstptr) 901 * ISP_IOXPUT_16(struct ispsoftc *, u_int16_t srcval, u_int16_t *dstptr) 902 * ISP_IOXPUT_32(struct ispsoftc *, u_int32_t srcval, u_int32_t *dstptr) | 876 * ISP_IOXPUT_8(ispsoftc_t *, uint8_t srcval, uint8_t *dstptr) 877 * ISP_IOXPUT_16(ispsoftc_t *, uint16_t srcval, uint16_t *dstptr) 878 * ISP_IOXPUT_32(ispsoftc_t *, uint32_t srcval, uint32_t *dstptr) |
903 * | 879 * |
904 * ISP_IOXGET_8(struct ispsoftc *, u_int8_t *srcptr, u_int8_t dstrval) 905 * ISP_IOXGET_16(struct ispsoftc *, u_int16_t *srcptr, u_int16_t dstrval) 906 * ISP_IOXGET_32(struct ispsoftc *, u_int32_t *srcptr, u_int32_t dstrval) | 880 * ISP_IOXGET_8(ispsoftc_t *, uint8_t *srcptr, uint8_t dstrval) 881 * ISP_IOXGET_16(ispsoftc_t *, uint16_t *srcptr, uint16_t dstrval) 882 * ISP_IOXGET_32(ispsoftc_t *, uint32_t *srcptr, uint32_t dstrval) |
907 * | 883 * |
908 * ISP_SWIZZLE_NVRAM_WORD(struct ispsoftc *, u_int16_t *) | 884 * ISP_SWIZZLE_NVRAM_WORD(ispsoftc_t *, uint16_t *) |
909 */ 910 911#endif /* _ISPVAR_H */ | 885 */ 886 887#endif /* _ISPVAR_H */ |