xref: /haiku/src/add-ons/kernel/drivers/network/ether/usb_ecm/ECMDevice.h (revision 3af8011358bd4c624a0979336d48dabb466171ed)
1 /*
2 	Driver for USB Ethernet Control Model devices
3 	Copyright (C) 2008 Michael Lotz <mmlr@mlotz.ch>
4 	Distributed under the terms of the MIT license.
5 */
6 #ifndef _USB_ECM_DEVICE_H_
7 #define _USB_ECM_DEVICE_H_
8 
9 #include "Driver.h"
10 
11 class ECMDevice {
12 public:
13 							ECMDevice(usb_device device);
14 							~ECMDevice();
15 
16 		status_t			InitCheck() { return fStatus; };
17 
18 		status_t			Open();
19 		bool				IsOpen() { return fOpen; };
20 
21 		status_t			Close();
22 		status_t			Free();
23 
24 		status_t			Read(uint8 *buffer, size_t *numBytes);
25 		status_t			Write(const uint8 *buffer, size_t *numBytes);
26 		status_t			Control(uint32 op, void *buffer, size_t length);
27 
28 		void				Removed();
29 		bool				IsRemoved() { return fRemoved; };
30 
31 		status_t			CompareAndReattach(usb_device device);
32 
33 private:
34 static	void				_ReadCallback(void *cookie, int32 status,
35 								void *data, size_t actualLength);
36 static	void				_WriteCallback(void *cookie, int32 status,
37 								void *data, size_t actualLength);
38 static	void				_NotifyCallback(void *cookie, int32 status,
39 								void *data, size_t actualLength);
40 
41 		status_t			_SetupDevice();
42 		status_t			_ReadMACAddress(usb_device device, uint8 *buffer);
43 
44 		// state tracking
45 		status_t			fStatus;
46 		bool				fOpen;
47 		bool				fRemoved;
48 		int32				fInsideNotify;
49 		usb_device			fDevice;
50 		uint16				fVendorID;
51 		uint16				fProductID;
52 
53 		// interface and device infos
54 		uint8				fControlInterfaceIndex;
55 		uint8				fDataInterfaceIndex;
56 		uint8				fMACAddressIndex;
57 		uint16				fMaxSegmentSize;
58 
59 		// pipes for notifications and data io
60 		usb_pipe			fNotifyEndpoint;
61 		usb_pipe			fReadEndpoint;
62 		usb_pipe			fWriteEndpoint;
63 
64 		// data stores for async usb transfers
65 		uint32				fActualLengthRead;
66 		uint32				fActualLengthWrite;
67 		int32				fStatusRead;
68 		int32				fStatusWrite;
69 		sem_id				fNotifyReadSem;
70 		sem_id				fNotifyWriteSem;
71 
72 		uint8 *				fNotifyBuffer;
73 		uint32				fNotifyBufferLength;
74 
75 		// connection data
76 		sem_id				fLinkStateChangeSem;
77 		uint8				fMACAddress[6];
78 		bool				fHasConnection;
79 		uint32				fDownstreamSpeed;
80 		uint32				fUpstreamSpeed;
81 };
82 
83 #endif //_USB_ECM_DEVICE_H_
84