2009-11-03 22:45:58 +03:00
/*
* Copyright ( c ) 2009 Intel Corporation . All rights reserved .
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms and conditions of the GNU General Public License ,
* version 2 , as published by the Free Software Foundation .
*
* This program is distributed in the hope it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
* more details .
*
* You should have received a copy of the GNU General Public License along with
* this program ; if not , write to the Free Software Foundation , Inc . ,
* 51 Franklin St - Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Maintained at www . Open - FCoE . org
*/
# ifndef _FC_LIBFC_H_
# define _FC_LIBFC_H_
# define FC_LIBFC_LOGGING 0x01 /* General logging, not categorized */
# define FC_LPORT_LOGGING 0x02 /* lport layer logging */
2009-11-03 22:47:39 +03:00
# define FC_DISC_LOGGING 0x04 /* discovery layer logging */
2009-11-03 22:45:58 +03:00
# define FC_RPORT_LOGGING 0x08 /* rport layer logging */
2009-11-03 22:47:39 +03:00
# define FC_FCP_LOGGING 0x10 /* I/O path logging */
# define FC_EM_LOGGING 0x20 /* Exchange Manager logging */
# define FC_EXCH_LOGGING 0x40 /* Exchange/Sequence logging */
# define FC_SCSI_LOGGING 0x80 /* SCSI logging (mostly error handling) */
2009-11-03 22:45:58 +03:00
extern unsigned int fc_debug_logging ;
2009-11-03 22:47:39 +03:00
# define FC_CHECK_LOGGING(LEVEL, CMD) \
do { \
if ( unlikely ( fc_debug_logging & LEVEL ) ) \
do { \
CMD ; \
} while ( 0 ) ; \
} while ( 0 )
2009-11-03 22:45:58 +03:00
# define FC_LIBFC_DBG(fmt, args...) \
FC_CHECK_LOGGING ( FC_LIBFC_LOGGING , \
2012-12-04 06:14:53 +04:00
pr_info ( " libfc: " fmt , # # args ) )
2009-11-03 22:45:58 +03:00
# define FC_LPORT_DBG(lport, fmt, args...) \
FC_CHECK_LOGGING ( FC_LPORT_LOGGING , \
2012-12-04 06:14:53 +04:00
pr_info ( " host%u: lport %6.6x: " fmt , \
( lport ) - > host - > host_no , \
( lport ) - > port_id , # # args ) )
2009-11-03 22:45:58 +03:00
2012-12-04 06:14:53 +04:00
# define FC_DISC_DBG(disc, fmt, args...) \
FC_CHECK_LOGGING ( FC_DISC_LOGGING , \
pr_info ( " host%u: disc: " fmt , \
fc_disc_lport ( disc ) - > host - > host_no , \
# #args))
2009-11-03 22:45:58 +03:00
# define FC_RPORT_ID_DBG(lport, port_id, fmt, args...) \
FC_CHECK_LOGGING ( FC_RPORT_LOGGING , \
2012-12-04 06:14:53 +04:00
pr_info ( " host%u: rport %6.6x: " fmt , \
( lport ) - > host - > host_no , \
( port_id ) , # # args ) )
2009-11-03 22:45:58 +03:00
# define FC_RPORT_DBG(rdata, fmt, args...) \
FC_RPORT_ID_DBG ( ( rdata ) - > local_port , ( rdata ) - > ids . port_id , fmt , # # args )
# define FC_FCP_DBG(pkt, fmt, args...) \
FC_CHECK_LOGGING ( FC_FCP_LOGGING , \
2010-12-01 03:19:15 +03:00
{ \
if ( ( pkt ) - > seq_ptr ) { \
struct fc_exch * _ep = NULL ; \
_ep = fc_seq_exch ( ( pkt ) - > seq_ptr ) ; \
2012-12-04 06:14:53 +04:00
pr_info ( " host%u: fcp: %6.6x: " \
2010-12-01 03:19:15 +03:00
" xid %04x-%04x: " fmt , \
2009-11-03 22:45:58 +03:00
( pkt ) - > lp - > host - > host_no , \
2010-12-01 03:19:15 +03:00
( pkt ) - > rport - > port_id , \
( _ep ) - > oxid , ( _ep ) - > rxid , # # args ) ; \
} else { \
2012-12-04 06:14:53 +04:00
pr_info ( " host%u: fcp: %6.6x: " fmt , \
2010-12-01 03:19:15 +03:00
( pkt ) - > lp - > host - > host_no , \
( pkt ) - > rport - > port_id , # # args ) ; \
} \
} )
2009-11-03 22:45:58 +03:00
# define FC_EXCH_DBG(exch, fmt, args...) \
FC_CHECK_LOGGING ( FC_EXCH_LOGGING , \
2012-12-04 06:14:53 +04:00
pr_info ( " host%u: xid %4x: " fmt , \
( exch ) - > lp - > host - > host_no , \
exch - > xid , # # args ) )
2009-11-03 22:45:58 +03:00
# define FC_SCSI_DBG(lport, fmt, args...) \
2009-11-03 22:47:39 +03:00
FC_CHECK_LOGGING ( FC_SCSI_LOGGING , \
2012-12-04 06:14:53 +04:00
pr_info ( " host%u: scsi: " fmt , \
( lport ) - > host - > host_no , # # args ) )
2009-11-03 22:45:58 +03:00
2011-01-29 03:04:02 +03:00
/*
* FC - 4 Providers .
*/
extern struct fc4_prov * fc_active_prov [ ] ; /* providers without recv */
extern struct fc4_prov * fc_passive_prov [ ] ; /* providers with recv */
extern struct mutex fc_prov_mutex ; /* lock over table changes */
extern struct fc4_prov fc_rport_t0_prov ; /* type 0 provider */
extern struct fc4_prov fc_lport_els_prov ; /* ELS provider */
extern struct fc4_prov fc_rport_fcp_init ; /* FCP initiator provider */
2009-11-03 22:45:58 +03:00
/*
* Set up direct - data placement for this I / O request
*/
void fc_fcp_ddp_setup ( struct fc_fcp_pkt * fsp , u16 xid ) ;
2011-05-17 03:45:40 +04:00
void fc_fcp_ddp_done ( struct fc_fcp_pkt * fsp ) ;
2009-11-03 22:45:58 +03:00
/*
* Module setup functions
*/
int fc_setup_exch_mgr ( void ) ;
void fc_destroy_exch_mgr ( void ) ;
int fc_setup_rport ( void ) ;
void fc_destroy_rport ( void ) ;
2009-11-03 22:46:03 +03:00
int fc_setup_fcp ( void ) ;
void fc_destroy_fcp ( void ) ;
2009-11-03 22:45:58 +03:00
/*
* Internal libfc functions
*/
const char * fc_els_resp_type ( struct fc_frame * ) ;
2011-01-29 03:04:18 +03:00
extern void fc_fc4_add_lport ( struct fc_lport * ) ;
extern void fc_fc4_del_lport ( struct fc_lport * ) ;
2011-01-29 03:05:22 +03:00
extern void fc_fc4_conf_lport_params ( struct fc_lport * , enum fc_fh_type ) ;
2009-11-03 22:45:58 +03:00
2009-11-03 22:47:28 +03:00
/*
* Copies a buffer into an sg list
*/
u32 fc_copy_buffer_to_sglist ( void * buf , size_t len ,
struct scatterlist * sg ,
u32 * nents , size_t * offset ,
2011-11-25 19:14:23 +04:00
u32 * crc ) ;
2009-11-03 22:47:28 +03:00
2009-11-03 22:45:58 +03:00
# endif /* _FC_LIBFC_H_ */