blob: e73a221004ba2cd4e4f93854e980738a0cdec6e7 (
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
|
/*
* Copyright (c) 2006-2008 Advanced Micro Devices,Inc. ("AMD").
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of the
* License, or (at your option) any later version.
*
* This code is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA
*/
typedef struct {
union {
unsigned long HceUlong;
unsigned short HceUshort;
struct {
unsigned short EmulationEnable: 1;
unsigned short EmulationInterrupt: 1;
unsigned short CharacterPending: 1;
unsigned short IRQEn: 1;
unsigned short ExternalIRQEn: 1;
unsigned short GateA20Sequence: 1;
unsigned short IRQ1Active: 1;
unsigned short IRQ12Active: 1;
unsigned short A20State: 1;
};
};
} HCE_CONTROL;
// Host Controller Operational Registers
typedef struct {
unsigned long HcRevision;
unsigned long HcControl;
unsigned long HcCommandStatus;
unsigned long HcInterruptStatus;
unsigned long HcInterruptEnable;
unsigned long HcInterruptDisable;
unsigned long HcHCCA;
unsigned long HcPeriodCurrentED;
unsigned long HcControlHeadED;
unsigned long HcControlCurrentED;
unsigned long HcBulkHeadED;
unsigned long HcBulkCurrentED;
unsigned long HcDoneHead;
unsigned long HcFmInterval;
unsigned long HcFmRemaining;
unsigned long HcFmNumber;
unsigned long HcPeriodicStart;
unsigned long HcLSThreshold;
unsigned long HcRhDescriptorA;
unsigned long HcRhDescriptorB;
unsigned long HcRhStatus;
unsigned long HcRhPortStatus[2];
unsigned char Reserved[0x100-0x54-2*4]; // Reserved for use by HC
HCE_CONTROL HceControl; // 0x100
unsigned long HceInput; // 0x104
unsigned long HceOutput; // 0x108
unsigned long HceStatus; // 0x10C
} HCOR;
// HcInterruptStatus & HcInterruptDisable fields:
#define SO 0x00000001L // Scheduling Overrun
#define WDH 0x00000002L // HcDoneHead Writeback
#define SF 0x00000004L // Start of Frame
#define RD 0x00000008L // Resume Detect
#define UE 0x00000010L // Unrecoverable Error
#define FNO 0x00000020L // Frame Number Overflow
#define RHSC 0x00000040L // Root Hub Status Change
#define OC 0x40000000L // Ownership Change
#define MIE 0x80000000L // Master Interrupt Enable
// HceControl fields:
#define EMULATION_ENABLE 0x01
#define EMULATION_INTERRUPT 0x02
#define CHARACTER_PENDING 0x04
#define IRQ_ENABLE 0x08
#define EXTERNAL_IRQ_ENABLE 0x10
#define GATE_A20_SEQUENCE 0x20
#define IRQ1_ACTIVE 0x40
#define IRQ12_ACTIVE 0x80
#define A20_STATE 0x100
// HceStatus fields:
#define CMD_DATA 0x08
|