summaryrefslogtreecommitdiff
path: root/MdePkg/Include/Protocol/LegacyInterrupt.h
blob: 54dc9aaa9b51713912bd9a72a3715a49ff1f1727 (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
/** @file
  This protocol manages the legacy memory regions between 0xc0000 - 0xfffff

  Copyright (c) 2006, Intel Corporation                                                         
  All rights reserved. This program and the accompanying materials                          
  are licensed and made available under the terms and conditions of the BSD License         
  which accompanies this distribution.  The full text of the license may be found at        
  http://opensource.org/licenses/bsd-license.php                                            

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.    

  Module Name:  LegacyInterrupt.h

  @par Revision Reference:
  This protocol is defined in Framework for EFI Compatibility Support Module spec
  Version 0.96

**/

#ifndef _EFI_LEGACY_INTERRUPT_H_
#define _EFI_LEGACY_INTERRUPT_H_

#define EFI_LEGACY_INTERRUPT_PROTOCOL_GUID \
  { \
    0x31ce593d, 0x108a, 0x485d, {0xad, 0xb2, 0x78, 0xf2, 0x1f, 0x29, 0x66, 0xbe } \
  }

typedef struct _EFI_LEGACY_INTERRUPT_PROTOCOL EFI_LEGACY_INTERRUPT_PROTOCOL;

/**
  Get the number of PIRQs this hardware supports.

  @param  This Protocol instance pointer.
  @param  NumberPirsq Number of PIRQs.

  @retval  EFI_SUCCESS Number of PIRQs returned.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_INTERRUPT_GET_NUMBER_PIRQS) (
  IN EFI_LEGACY_INTERRUPT_PROTOCOL            *This,
  OUT UINT8                                   *NumberPirqs
  );

/**
  Gets the PCI location associated with this protocol.

  @param  This Protocol instance pointer.
  @param  Bus PCI Bus
  @param  Device PCI Device
  @param  Function PCI Function

  @retval  EFI_SUCCESS Bus/Device/Function returned

**/
typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_INTERRUPT_GET_LOCATION) (
  IN EFI_LEGACY_INTERRUPT_PROTOCOL            *This,
  OUT UINT8                                   *Bus,
  OUT UINT8                                   *Device,
  OUT UINT8                                   *Function
  );

/**
  Read the PIRQ register and return the data

  @param  This Protocol instance pointer.
  @param  PirqNumber PIRQ register to read
  @param  PirqData Data read

  @retval  EFI_SUCCESS Data was read
  @retval  EFI_INVALID_PARAMETER Invalid PIRQ number

**/
typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_INTERRUPT_READ_PIRQ) (
  IN EFI_LEGACY_INTERRUPT_PROTOCOL           *This,
  IN  UINT8                                  PirqNumber,
  OUT UINT8                                  *PirqData
  );

/**
  Write the specified PIRQ register with the given data.

  @param  This Protocol instance pointer.
  @param  PirqNumber PIRQ register to read.
  @param  PirqData Data written.

  @retval  EFI_SUCCESS Table pointer returned
  @retval  EFI_INVALID_PARAMETER Invalid PIRQ number

**/
typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_INTERRUPT_WRITE_PIRQ) (
  IN EFI_LEGACY_INTERRUPT_PROTOCOL           *This,
  IN  UINT8                                  PirqNumber,
  IN UINT8                                   PirqData
  );

/**
  @par Protocol Description:
  Abstracts the PIRQ programming from the generic EFI Compatibility Support Modules

  @param GetNumberPirqs
  Gets the number of PIRQs supported.

  @param GetLocation
  Gets the PCI bus, device, and function that associated with this protocol. 

  @param ReadPirq
  Reads the indicated PIRQ register.

  @param WritePirq
  Writes to the indicated PIRQ register. 

**/
struct _EFI_LEGACY_INTERRUPT_PROTOCOL {
  EFI_LEGACY_INTERRUPT_GET_NUMBER_PIRQS GetNumberPirqs;
  EFI_LEGACY_INTERRUPT_GET_LOCATION     GetLocation;
  EFI_LEGACY_INTERRUPT_READ_PIRQ        ReadPirq;
  EFI_LEGACY_INTERRUPT_WRITE_PIRQ       WritePirq;
};

extern EFI_GUID gEfiLegacyInterruptProtocolGuid;

#endif