blob: b2f5b953ba87ed64abeee02ec553bf345068c221 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
/*********************************************************************
*
* Filename: toshoboe.h
* Version: 0.1
* Description: Driver for the Toshiba OBOE (or type-O)
* FIR Chipset.
* Status: Experimental.
* Author: James McKenzie <james@fishsoup.dhs.org>
* Created at: Sat May 8 12:35:27 1999
*
* Copyright (c) 1999 James McKenzie, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* Neither James McKenzie nor Cambridge University admit liability nor
* provide warranty for any of this software. This material is
* provided "AS-IS" and at no charge.
*
* Applicable Models : Libretto 100CT. and many more
*
********************************************************************/
/*
* $Log: toshoboe.h,v $
* Revision 1.2 1999/05/09 01:43:08 root
* *** empty log message ***
*
* Revision 1.1 1999/05/09 01:25:58 root
* Initial revision
*
*/
#ifndef TOSHOBOE_H
#define TOSHOBOE_H
/* Registers */
/*Receive and transmit task registers (read only) */
#define OBOE_RCVT (0x00+(self->base))
#define OBOE_XMTT (0x01+(self->base))
#define OBOE_XMTT_OFFSET 0x40
/*Page pointers to the TaskFile structure */
#define OBOE_TFP2 (0x02+(self->base))
#define OBOE_TFP0 (0x04+(self->base))
#define OBOE_TFP1 (0x05+(self->base))
/*Dunno */
#define OBOE_REG_3 (0x03+(self->base))
/*Number of tasks to use in Xmit and Recv queues */
#define OBOE_NTR (0x07+(self->base))
#define OBOE_NTR_XMIT4 0x00
#define OBOE_NTR_XMIT8 0x10
#define OBOE_NTR_XMIT16 0x30
#define OBOE_NTR_XMIT32 0x70
#define OBOE_NTR_XMIT64 0xf0
#define OBOE_NTR_RECV4 0x00
#define OBOE_NTR_RECV8 0x01
#define OBOE_NTR_RECV6 0x03
#define OBOE_NTR_RECV32 0x07
#define OBOE_NTR_RECV64 0x0f
/* Dunno */
#define OBOE_REG_9 (0x09+(self->base))
/* Interrupt Status Register */
#define OBOE_ISR (0x0c+(self->base))
#define OBOE_ISR_TXDONE 0x80
#define OBOE_ISR_RXDONE 0x40
#define OBOE_ISR_20 0x20
#define OBOE_ISR_10 0x10
#define OBOE_ISR_8 0x08 /*This is collision or parity or something */
#define OBOE_ISR_4 0x08
#define OBOE_ISR_2 0x08
#define OBOE_ISR_1 0x08
/*Dunno */
#define OBOE_REG_D (0x0d+(self->base))
/*Register Lock Register */
#define OBOE_LOCK ((self->base)+0x0e)
/*Speed control registers */
#define OBOE_PMDL (0x10+(self->base))
#define OBOE_PMDL_SIR 0x18
#define OBOE_PMDL_MIR 0xa0
#define OBOE_PMDL_FIR 0x40
#define OBOE_SMDL (0x18+(self->base))
#define OBOE_SMDL_SIR 0x20
#define OBOE_SMDL_MIR 0x01
#define OBOE_SMDL_FIR 0x0f
#define OBOE_UDIV (0x19+(self->base))
/*Dunno */
#define OBOE_REG_11 (0x11+(self->base))
/*Chip Reset Register */
#define OBOE_RST (0x15+(self->base))
#define OBOE_RST_WRAP 0x8
/*Dunno */
#define OBOE_REG_1A (0x1a+(self->base))
#define OBOE_REG_1B (0x1b+(self->base))
/* The PCI ID of the OBOE chip */
#ifndef PCI_DEVICE_ID_FIR701
#define PCI_DEVICE_ID_FIR701 0x0701
#endif
typedef unsigned int dword;
typedef unsigned short int word;
typedef unsigned char byte;
typedef dword Paddr;
struct OboeTask
{
__u16 len;
__u8 unused;
__u8 control;
__u32 buffer;
};
#define OBOE_NTASKS 64
struct OboeTaskFile
{
struct OboeTask recv[OBOE_NTASKS];
struct OboeTask xmit[OBOE_NTASKS];
};
#define OBOE_TASK_BUF_LEN (sizeof(struct OboeTaskFile) << 1)
/*These set the number of slots in use */
#define TX_SLOTS 4
#define RX_SLOTS 4
/* You need also to change this, toshiba uses 4,8 and 4,4 */
/* It makes no difference if you are only going to use ONETASK mode */
/* remember each buffer use XX_BUF_SZ more _PHYSICAL_ memory */
#define OBOE_NTR_VAL (OBOE_NTR_XMIT4 | OBOE_NTR_RECV4)
struct toshoboe_cb
{
struct irda_device idev; /*IRDA device */
struct pci_dev *pdev; /*PCI device */
int base; /*IO base */
int txpending; /*how many tx's are pending */
int txs, rxs; /*Which slots are we at */
void *taskfilebuf; /*The unaligned taskfile buffer */
struct OboeTaskFile *taskfile; /*The taskfile */
void *xmit_bufs[TX_SLOTS]; /*The buffers */
void *recv_bufs[RX_SLOTS];
};
#endif
|