53
53
#include "cxgb4_uld.h"
54
54
55
55
#define CH_WARN (adap , fmt , ...) dev_warn(adap->pdev_dev, fmt, ## __VA_ARGS__)
56
+ extern struct list_head adapter_list ;
57
+ extern struct mutex uld_mutex ;
56
58
57
59
enum {
58
60
MAX_NPORTS = 4 , /* max # of ports */
@@ -338,6 +340,7 @@ struct adapter_params {
338
340
enum chip_type chip ; /* chip code */
339
341
struct arch_specific_params arch ; /* chip specific params */
340
342
unsigned char offload ;
343
+ unsigned char crypto ; /* HW capability for crypto */
341
344
342
345
unsigned char bypass ;
343
346
@@ -403,7 +406,6 @@ struct fw_info {
403
406
struct fw_hdr fw_hdr ;
404
407
};
405
408
406
-
407
409
struct trace_params {
408
410
u32 data [TRACE_LEN / 4 ];
409
411
u32 mask [TRACE_LEN / 4 ];
@@ -510,6 +512,10 @@ enum { /* adapter flags */
510
512
FW_OFLD_CONN = (1 << 9 ),
511
513
};
512
514
515
+ enum {
516
+ ULP_CRYPTO_LOOKASIDE = 1 << 0 ,
517
+ };
518
+
513
519
struct rx_sw_desc ;
514
520
515
521
struct sge_fl { /* SGE free-buffer queue state */
@@ -680,6 +686,16 @@ struct sge_ctrl_txq { /* state for an SGE control Tx queue */
680
686
u8 full ; /* the Tx ring is full */
681
687
} ____cacheline_aligned_in_smp ;
682
688
689
+ struct sge_uld_rxq_info {
690
+ char name [IFNAMSIZ ]; /* name of ULD driver */
691
+ struct sge_ofld_rxq * uldrxq ; /* Rxq's for ULD */
692
+ u16 * msix_tbl ; /* msix_tbl for uld */
693
+ u16 * rspq_id ; /* response queue id's of rxq */
694
+ u16 nrxq ; /* # of ingress uld queues */
695
+ u16 nciq ; /* # of completion queues */
696
+ u8 uld ; /* uld type */
697
+ };
698
+
683
699
struct sge {
684
700
struct sge_eth_txq ethtxq [MAX_ETH_QSETS ];
685
701
struct sge_ofld_txq ofldtxq [MAX_OFLD_QSETS ];
@@ -691,6 +707,7 @@ struct sge {
691
707
struct sge_ofld_rxq rdmarxq [MAX_RDMA_QUEUES ];
692
708
struct sge_ofld_rxq rdmaciq [MAX_RDMA_CIQS ];
693
709
struct sge_rspq fw_evtq ____cacheline_aligned_in_smp ;
710
+ struct sge_uld_rxq_info * * uld_rxq_info ;
694
711
695
712
struct sge_rspq intrq ____cacheline_aligned_in_smp ;
696
713
spinlock_t intrq_lock ;
@@ -702,6 +719,7 @@ struct sge {
702
719
u16 niscsitq ; /* # of available iSCST Rx queues */
703
720
u16 rdmaqs ; /* # of available RDMA Rx queues */
704
721
u16 rdmaciqs ; /* # of available RDMA concentrator IQs */
722
+ u16 nqs_per_uld ; /* # of Rx queues per ULD */
705
723
u16 iscsi_rxq [MAX_OFLD_QSETS ];
706
724
u16 iscsit_rxq [MAX_ISCSIT_QUEUES ];
707
725
u16 rdma_rxq [MAX_RDMA_QUEUES ];
@@ -757,6 +775,17 @@ struct hash_mac_addr {
757
775
u8 addr [ETH_ALEN ];
758
776
};
759
777
778
+ struct uld_msix_bmap {
779
+ unsigned long * msix_bmap ;
780
+ unsigned int mapsize ;
781
+ spinlock_t lock ; /* lock for acquiring bitmap */
782
+ };
783
+
784
+ struct uld_msix_info {
785
+ unsigned short vec ;
786
+ char desc [IFNAMSIZ + 10 ];
787
+ };
788
+
760
789
struct adapter {
761
790
void __iomem * regs ;
762
791
void __iomem * bar2 ;
@@ -779,6 +808,9 @@ struct adapter {
779
808
unsigned short vec ;
780
809
char desc [IFNAMSIZ + 10 ];
781
810
} msix_info [MAX_INGQ + 1 ];
811
+ struct uld_msix_info * msix_info_ulds ; /* msix info for uld's */
812
+ struct uld_msix_bmap msix_bmap_ulds ; /* msix bitmap for all uld */
813
+ unsigned int msi_idx ;
782
814
783
815
struct doorbell_stats db_stats ;
784
816
struct sge sge ;
@@ -793,7 +825,9 @@ struct adapter {
793
825
unsigned int clipt_start ;
794
826
unsigned int clipt_end ;
795
827
struct clip_tbl * clipt ;
828
+ struct cxgb4_pci_uld_info * uld ;
796
829
void * uld_handle [CXGB4_ULD_MAX ];
830
+ unsigned int num_uld ;
797
831
struct list_head list_node ;
798
832
struct list_head rcu_node ;
799
833
struct list_head mac_hlist ; /* list of MAC addresses in MPS Hash */
@@ -952,6 +986,11 @@ static inline int is_offload(const struct adapter *adap)
952
986
return adap -> params .offload ;
953
987
}
954
988
989
+ static inline int is_pci_uld (const struct adapter * adap )
990
+ {
991
+ return adap -> params .crypto ;
992
+ }
993
+
955
994
static inline u32 t4_read_reg (struct adapter * adap , u32 reg_addr )
956
995
{
957
996
return readl (adap -> regs + reg_addr );
@@ -1185,8 +1224,6 @@ int t4_sge_init(struct adapter *adap);
1185
1224
void t4_sge_start (struct adapter * adap );
1186
1225
void t4_sge_stop (struct adapter * adap );
1187
1226
int cxgb_busy_poll (struct napi_struct * napi );
1188
- int cxgb4_set_rspq_intr_params (struct sge_rspq * q , unsigned int us ,
1189
- unsigned int cnt );
1190
1227
void cxgb4_set_ethtool_ops (struct net_device * netdev );
1191
1228
int cxgb4_write_rss (const struct port_info * pi , const u16 * queues );
1192
1229
extern int dbfifo_int_thresh ;
@@ -1289,6 +1326,18 @@ static inline int hash_mac_addr(const u8 *addr)
1289
1326
return a & 0x3f ;
1290
1327
}
1291
1328
1329
+ int cxgb4_set_rspq_intr_params (struct sge_rspq * q , unsigned int us ,
1330
+ unsigned int cnt );
1331
+ static inline void init_rspq (struct adapter * adap , struct sge_rspq * q ,
1332
+ unsigned int us , unsigned int cnt ,
1333
+ unsigned int size , unsigned int iqe_size )
1334
+ {
1335
+ q -> adap = adap ;
1336
+ cxgb4_set_rspq_intr_params (q , us , cnt );
1337
+ q -> iqe_len = iqe_size ;
1338
+ q -> size = size ;
1339
+ }
1340
+
1292
1341
void t4_write_indirect (struct adapter * adap , unsigned int addr_reg ,
1293
1342
unsigned int data_reg , const u32 * vals ,
1294
1343
unsigned int nregs , unsigned int start_idx );
@@ -1523,5 +1572,7 @@ void t4_idma_monitor(struct adapter *adapter,
1523
1572
int hz , int ticks );
1524
1573
int t4_set_vf_mac_acl (struct adapter * adapter , unsigned int vf ,
1525
1574
unsigned int naddr , u8 * addr );
1526
-
1575
+ void uld_mem_free (struct adapter * adap );
1576
+ int uld_mem_alloc (struct adapter * adap );
1577
+ void free_rspq_fl (struct adapter * adap , struct sge_rspq * rq , struct sge_fl * fl );
1527
1578
#endif /* __CXGB4_H__ */
0 commit comments