drivers/net/wireless/purelifi/plfxlc/usb.h

Source file repositories/reference/linux-study-clean/drivers/net/wireless/purelifi/plfxlc/usb.h

File Facts

System
Linux kernel
Corpus path
drivers/net/wireless/purelifi/plfxlc/usb.h
Extension
.h
Size
5202 bytes
Lines
199
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct plfxlc_usb_interrupt {
	spinlock_t lock; /* spin lock for usb interrupt buffer */
	struct urb *urb;
	void *buffer;
	int interval;
};

#define RX_URBS_COUNT 5

struct plfxlc_usb_rx {
	spinlock_t lock; /* spin lock for rx urb */
	struct mutex setup_mutex; /* mutex lockt for rx urb */
	u8 fragment[2 * USB_MAX_RX_SIZE];
	unsigned int fragment_length;
	unsigned int usb_packet_size;
	struct urb **urbs;
	int urbs_count;
};

struct plf_station {
   /*  7...3    |    2      |     1     |     0	    |
    * Reserved  | Heartbeat | FIFO full | Connected |
    */
	unsigned char flag;
	unsigned char mac[ETH_ALEN];
	struct sk_buff_head data_list;
};

struct plfxlc_firmware_file {
	u32 total_files;
	u32 total_size;
	u32 size;
	u32 start_addr;
	u32 control_packets;
} __packed;

#define STATION_CONNECTED_FLAG 0x1
#define STATION_FIFO_FULL_FLAG 0x2
#define STATION_HEARTBEAT_FLAG 0x4
#define STATION_ACTIVE_FLAG    0xFD

#define PURELIFI_SERIAL_LEN 256
#define STA_BROADCAST_INDEX (AP_USER_LIMIT)
#define MAX_STA_NUM         (AP_USER_LIMIT + 1)

struct plfxlc_usb_tx {
	unsigned long enabled;
	spinlock_t lock; /* spinlock for USB tx */
	u8 mac_fifo_full;
	struct sk_buff_head submitted_skbs;
	struct usb_anchor submitted;
	int submitted_urbs;
	bool stopped;
	struct timer_list tx_retry_timer;
	struct plf_station station[MAX_STA_NUM];
};

/* Contains the usb parts. The structure doesn't require a lock because intf
 * will not be changed after initialization.
 */
struct plfxlc_usb {
	struct timer_list sta_queue_cleanup;
	struct plfxlc_usb_rx rx;
	struct plfxlc_usb_tx tx;
	struct usb_interface *intf;
	struct usb_interface *ez_usb;
	u8 req_buf[64]; /* plfxlc_usb_iowrite16v needs 62 bytes */
	u8 sidx; /* store last served */
	bool rx_usb_enabled;
	bool initialized;
	bool was_running;
	bool link_up;
};

enum endpoints {
	EP_DATA_IN  = 2,
	EP_DATA_OUT = 8,
};

enum devicetype {
	DEVICE_LIFI_X  = 0,
	DEVICE_LIFI_XC  = 1,
	DEVICE_LIFI_XL  = 1,
};

enum {
	PLF_BIT_ENABLED = 1,
	PLF_BIT_MAX = 2,
};

Annotation

Implementation Notes