Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/loongson2ef/common/cs5536/cs5536_pci.c
26495 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/*
3
* read/write operation to the PCI config space of CS5536
4
*
5
* Copyright (C) 2007 Lemote, Inc.
6
* Author : jlliu, [email protected]
7
*
8
* Copyright (C) 2009 Lemote, Inc.
9
* Author: Wu Zhangjin, [email protected]
10
*
11
* the Virtual Support Module(VSM) for virtulizing the PCI
12
* configure space are defined in cs5536_modulename.c respectively,
13
*
14
* after this virtulizing, user can access the PCI configure space
15
* directly as a normal multi-function PCI device which follows
16
* the PCI-2.2 spec.
17
*/
18
19
#include <linux/types.h>
20
#include <cs5536/cs5536_pci.h>
21
#include <cs5536/cs5536_vsm.h>
22
23
enum {
24
CS5536_FUNC_START = -1,
25
CS5536_ISA_FUNC,
26
reserved_func,
27
CS5536_IDE_FUNC,
28
CS5536_ACC_FUNC,
29
CS5536_OHCI_FUNC,
30
CS5536_EHCI_FUNC,
31
CS5536_FUNC_END,
32
};
33
34
static const cs5536_pci_vsm_write vsm_conf_write[] = {
35
[CS5536_ISA_FUNC] = pci_isa_write_reg,
36
[reserved_func] = NULL,
37
[CS5536_IDE_FUNC] = pci_ide_write_reg,
38
[CS5536_ACC_FUNC] = pci_acc_write_reg,
39
[CS5536_OHCI_FUNC] = pci_ohci_write_reg,
40
[CS5536_EHCI_FUNC] = pci_ehci_write_reg,
41
};
42
43
static const cs5536_pci_vsm_read vsm_conf_read[] = {
44
[CS5536_ISA_FUNC] = pci_isa_read_reg,
45
[reserved_func] = NULL,
46
[CS5536_IDE_FUNC] = pci_ide_read_reg,
47
[CS5536_ACC_FUNC] = pci_acc_read_reg,
48
[CS5536_OHCI_FUNC] = pci_ohci_read_reg,
49
[CS5536_EHCI_FUNC] = pci_ehci_read_reg,
50
};
51
52
/*
53
* write to PCI config space and transfer it to MSR write.
54
*/
55
void cs5536_pci_conf_write4(int function, int reg, u32 value)
56
{
57
if ((function <= CS5536_FUNC_START) || (function >= CS5536_FUNC_END))
58
return;
59
if ((reg < 0) || (reg > 0x100) || ((reg & 0x03) != 0))
60
return;
61
62
if (vsm_conf_write[function] != NULL)
63
vsm_conf_write[function](reg, value);
64
}
65
66
/*
67
* read PCI config space and transfer it to MSR access.
68
*/
69
u32 cs5536_pci_conf_read4(int function, int reg)
70
{
71
u32 data = 0;
72
73
if ((function <= CS5536_FUNC_START) || (function >= CS5536_FUNC_END))
74
return 0;
75
if ((reg < 0) || ((reg & 0x03) != 0))
76
return 0;
77
if (reg > 0x100)
78
return 0xffffffff;
79
80
if (vsm_conf_read[function] != NULL)
81
data = vsm_conf_read[function](reg);
82
83
return data;
84
}
85
86