summaryrefslogtreecommitdiff
path: root/cpu/amd/geode_lx/gplvsa_ii/inc/hce.h
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