scsi request, part usb mass storage class driver, bulk transfers
[quarnos.git] / resources / rtl8139.h
blob5180287591988ed4eca0847423d68732e4bf3541
1 /* Quarn OS
3 * Realtek 8139 ethernet card
5 * Copyright (C) 2009 Pawel Dziepak
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 #include "net/nic.h"
24 #include "pci.h"
26 namespace resources {
27 /* socket */
28 class rtl8139 : public net::nic, public device {
29 protected:
30 enum reg {
31 tsd0 = 0x10,
32 tsad0 = 0x20,
33 rbstart = 0x30,
34 cmd = 0x37,
35 capr = 0x38,
36 imr = 0x3c,
37 isr = 0x3e,
38 rec_conf = 0x44,
39 config1 = 0x52
42 enum rcr {
43 rcr_apa = 1, /* accept all packets */
44 rcr_apm = 2, /* accept physical match */
45 rcr_am = 4, /* accept multicast */
46 rcr_ab = 8, /* accept broadcast */
47 rcr_aer = 0x20 /* accept error packet */
50 struct packet {
51 u16 status;
52 u16 size;
55 pci_did id;
57 int send_index;
58 int received_index;
60 volatile char *rec_buffer;
62 void init();
63 void send_packet(const buffer &x);
64 void receive_packet();
65 void get_mac_addr(u8 *addr) const;
67 void irq_handler();
69 public:
70 bool init_device(p<did>);
71 void send_data(const buffer &x);
72 net::mac_addr get_haddr() const;
74 static bool check_device(p<did>);
75 static void register_type();