@@ -34,6 +34,7 @@ struct mt76_reg_pair {
3434enum mt76_bus_type {
3535 MT76_BUS_MMIO ,
3636 MT76_BUS_USB ,
37+ MT76_BUS_SDIO ,
3738};
3839
3940struct mt76_bus_ops {
@@ -53,6 +54,7 @@ struct mt76_bus_ops {
5354
5455#define mt76_is_usb (dev ) ((dev)->bus->type == MT76_BUS_USB)
5556#define mt76_is_mmio (dev ) ((dev)->bus->type == MT76_BUS_MMIO)
57+ #define mt76_is_sdio (dev ) ((dev)->bus->type == MT76_BUS_SDIO)
5658
5759enum mt76_txq_id {
5860 MT_TXQ_VO = IEEE80211_AC_VO ,
@@ -95,6 +97,7 @@ struct mt76_queue_entry {
9597 union {
9698 struct mt76_txwi_cache * txwi ;
9799 struct urb * urb ;
100+ int buf_sz ;
98101 };
99102 enum mt76_txq_id qid ;
100103 bool skip_buf0 :1 ;
@@ -147,6 +150,8 @@ struct mt76_mcu_ops {
147150 int len , bool wait_resp );
148151 int (* mcu_skb_send_msg )(struct mt76_dev * dev , struct sk_buff * skb ,
149152 int cmd , bool wait_resp );
153+ u32 (* mcu_rr )(struct mt76_dev * dev , u32 offset );
154+ void (* mcu_wr )(struct mt76_dev * dev , u32 offset , u32 val );
150155 int (* mcu_wr_rp )(struct mt76_dev * dev , u32 base ,
151156 const struct mt76_reg_pair * rp , int len );
152157 int (* mcu_rd_rp )(struct mt76_dev * dev , u32 base ,
@@ -440,6 +445,24 @@ struct mt76_usb {
440445 } mcu ;
441446};
442447
448+ struct mt76_sdio {
449+ struct task_struct * tx_kthread ;
450+ struct task_struct * kthread ;
451+ struct work_struct stat_work ;
452+
453+ unsigned long state ;
454+
455+ struct sdio_func * func ;
456+
457+ struct {
458+ struct mutex lock ;
459+ int pse_data_quota ;
460+ int ple_data_quota ;
461+ int pse_mcu_quota ;
462+ int deficit ;
463+ } sched ;
464+ };
465+
443466struct mt76_mmio {
444467 void __iomem * regs ;
445468 spinlock_t irq_lock ;
@@ -626,6 +649,7 @@ struct mt76_dev {
626649 union {
627650 struct mt76_mmio mmio ;
628651 struct mt76_usb usb ;
652+ struct mt76_sdio sdio ;
629653 };
630654};
631655
@@ -1030,6 +1054,12 @@ void mt76u_stop_rx(struct mt76_dev *dev);
10301054int mt76u_resume_rx (struct mt76_dev * dev );
10311055void mt76u_queues_deinit (struct mt76_dev * dev );
10321056
1057+ int mt76s_init (struct mt76_dev * dev , struct sdio_func * func ,
1058+ const struct mt76_bus_ops * bus_ops );
1059+ int mt76s_alloc_queues (struct mt76_dev * dev );
1060+ void mt76s_stop_txrx (struct mt76_dev * dev );
1061+ void mt76s_deinit (struct mt76_dev * dev );
1062+
10331063struct sk_buff *
10341064mt76_mcu_msg_alloc (struct mt76_dev * dev , const void * data ,
10351065 int data_len );
0 commit comments