ispvar.h (285154) | ispvar.h (285459) |
---|---|
1/* $FreeBSD: head/sys/dev/isp/ispvar.h 285154 2015-07-05 02:09:46Z mav $ */ | 1/* $FreeBSD: head/sys/dev/isp/ispvar.h 285459 2015-07-13 15:11:05Z mav $ */ |
2/*- 3 * Copyright (c) 1997-2009 by Matthew Jacob 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * --- 361 unchanged lines hidden (view full) --- 371 * departed). Then we're done and can resume normal operations. 372 * 373 * Negative invariants that we try and test for are: 374 * 375 * + There can never be two non-NIL entries with the same { Port, Node } WWN 376 * duples. 377 * 378 * + There can never be two non-NIL entries with the same handle. | 2/*- 3 * Copyright (c) 1997-2009 by Matthew Jacob 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * --- 361 unchanged lines hidden (view full) --- 371 * departed). Then we're done and can resume normal operations. 372 * 373 * Negative invariants that we try and test for are: 374 * 375 * + There can never be two non-NIL entries with the same { Port, Node } WWN 376 * duples. 377 * 378 * + There can never be two non-NIL entries with the same handle. |
379 * 380 * + There can never be two non-NIL entries which have the same dev_map_idx 381 * value. | |
382 */ 383typedef struct { 384 /* 385 * This is the handle that the firmware needs in order for us to 386 * send commands to the device. For pre-24XX cards, this would be 387 * the 'loopid'. 388 */ 389 uint16_t handle; 390 391 /* | 379 */ 380typedef struct { 381 /* 382 * This is the handle that the firmware needs in order for us to 383 * send commands to the device. For pre-24XX cards, this would be 384 * the 'loopid'. 385 */ 386 uint16_t handle; 387 388 /* |
392 * The dev_map_idx, if nonzero, is the system virtual target ID (+1) 393 * | |
394 * A device is 'autologin' if the firmware automatically logs into 395 * it (re-logins as needed). Basically, local private loop devices. 396 * 397 * PRLI word 3 parameters contains role as well as other things. 398 * 399 * The state is the current state of this entry. 400 * | 389 * A device is 'autologin' if the firmware automatically logs into 390 * it (re-logins as needed). Basically, local private loop devices. 391 * 392 * PRLI word 3 parameters contains role as well as other things. 393 * 394 * The state is the current state of this entry. 395 * |
396 * The is_target is the current state of target on this port. 397 * 398 * The is_initiator is the current state of initiator on this port. 399 * |
|
401 * Portid is obvious, as are node && port WWNs. The new_role and 402 * new_portid is for when we are pending a change. | 400 * Portid is obvious, as are node && port WWNs. The new_role and 401 * new_portid is for when we are pending a change. |
403 * 404 * The 'target_mode' tag means that this entry arrived via a 405 * target mode command and is immune from normal flushing rules. 406 * You should also never see anything with an initiator role 407 * with this set. | |
408 */ 409 uint16_t prli_word3; /* PRLI parameters */ 410 uint16_t new_prli_word3; /* Incoming new PRLI parameters */ | 402 */ 403 uint16_t prli_word3; /* PRLI parameters */ 404 uint16_t new_prli_word3; /* Incoming new PRLI parameters */ |
411 uint16_t dev_map_idx : 12, | 405 uint16_t : 12, |
412 autologin : 1, /* F/W does PLOGI/PLOGO */ 413 state : 3; | 406 autologin : 1, /* F/W does PLOGI/PLOGO */ 407 state : 3; |
414 uint32_t : 7, 415 target_mode : 1, | 408 uint32_t : 6, 409 is_target : 1, 410 is_initiator : 1, |
416 portid : 24; 417 uint32_t | 411 portid : 24; 412 uint32_t |
418 : 5, 419 reported_gone : 1, 420 announced : 1, 421 dirty : 1, /* commands have been run */ | 413 : 8, |
422 new_portid : 24; 423 uint64_t node_wwn; 424 uint64_t port_wwn; 425 uint32_t gone_timer; 426} fcportdb_t; 427 428#define FC_PORTDB_STATE_NIL 0 429#define FC_PORTDB_STATE_PROBATIONAL 1 430#define FC_PORTDB_STATE_DEAD 2 431#define FC_PORTDB_STATE_CHANGED 3 432#define FC_PORTDB_STATE_NEW 4 433#define FC_PORTDB_STATE_PENDING_VALID 5 434#define FC_PORTDB_STATE_ZOMBIE 6 435#define FC_PORTDB_STATE_VALID 7 436 | 414 new_portid : 24; 415 uint64_t node_wwn; 416 uint64_t port_wwn; 417 uint32_t gone_timer; 418} fcportdb_t; 419 420#define FC_PORTDB_STATE_NIL 0 421#define FC_PORTDB_STATE_PROBATIONAL 1 422#define FC_PORTDB_STATE_DEAD 2 423#define FC_PORTDB_STATE_CHANGED 3 424#define FC_PORTDB_STATE_NEW 4 425#define FC_PORTDB_STATE_PENDING_VALID 5 426#define FC_PORTDB_STATE_ZOMBIE 6 427#define FC_PORTDB_STATE_VALID 7 428 |
429#define FC_PORTDB_TGT(isp, bus, pdb) (int)(lp - FCPARAM(isp, bus)->portdb) 430 |
|
437/* 438 * FC card specific information 439 * 440 * This structure is replicated across multiple channels for multi-id 441 * capapble chipsets, with some entities different on a per-channel basis. 442 */ 443 444typedef struct { --- 35 unchanged lines hidden (view full) --- 480 uint64_t isp_wwnn_nvram; 481 uint64_t isp_wwpn_nvram; 482 483 /* 484 * Our Port Data Base 485 */ 486 fcportdb_t portdb[MAX_FC_TARG]; 487 | 431/* 432 * FC card specific information 433 * 434 * This structure is replicated across multiple channels for multi-id 435 * capapble chipsets, with some entities different on a per-channel basis. 436 */ 437 438typedef struct { --- 35 unchanged lines hidden (view full) --- 474 uint64_t isp_wwnn_nvram; 475 uint64_t isp_wwpn_nvram; 476 477 /* 478 * Our Port Data Base 479 */ 480 fcportdb_t portdb[MAX_FC_TARG]; 481 |
488#ifdef ISP_TARGET_MODE | |
489 /* | 482 /* |
490 * This maps N-Port Handle to portdb entry so we 491 * don't have to search for every incoming command. 492 * 493 * The mapping function is to take any non-zero entry and 494 * subtract one to get the portdb index. This means that 495 * entries which are zero are unmapped (i.e., don't exist). 496 */ 497 uint16_t isp_tgt_map[MAX_NPORT_HANDLE]; 498#endif 499 500 /* | |
501 * Scratch DMA mapped in area to fetch Port Database stuff, etc. 502 */ 503 void * isp_scratch; 504 XS_DMA_ADDR_T isp_scdma; 505} fcparam; 506 507#define FW_CONFIG_WAIT 0 508#define FW_WAIT_AL_PA 1 --- 326 unchanged lines hidden (view full) --- 835/* 836 * Initialize Hardware to known state 837 */ 838void isp_init(ispsoftc_t *); 839 840/* 841 * Reset the ISP and call completion for any orphaned commands. 842 */ | 483 * Scratch DMA mapped in area to fetch Port Database stuff, etc. 484 */ 485 void * isp_scratch; 486 XS_DMA_ADDR_T isp_scdma; 487} fcparam; 488 489#define FW_CONFIG_WAIT 0 490#define FW_WAIT_AL_PA 1 --- 326 unchanged lines hidden (view full) --- 817/* 818 * Initialize Hardware to known state 819 */ 820void isp_init(ispsoftc_t *); 821 822/* 823 * Reset the ISP and call completion for any orphaned commands. 824 */ |
843void isp_reinit(ispsoftc_t *, int); | 825int isp_reinit(ispsoftc_t *, int); |
844 845/* 846 * Internal Interrupt Service Routine 847 * 848 * The outer layers do the spade work to get the appropriate status register, 849 * semaphore register and first mailbox register (if appropriate). This also 850 * means that most spurious/bogus interrupts not for us can be filtered first. 851 */ --- 338 unchanged lines hidden --- | 826 827/* 828 * Internal Interrupt Service Routine 829 * 830 * The outer layers do the spade work to get the appropriate status register, 831 * semaphore register and first mailbox register (if appropriate). This also 832 * means that most spurious/bogus interrupts not for us can be filtered first. 833 */ --- 338 unchanged lines hidden --- |