Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
tty
serial
8250
8250_gsc.c
Go to the documentation of this file.
1
/*
2
* Serial Device Initialisation for Lasi/Asp/Wax/Dino
3
*
4
* (c) Copyright Matthew Wilcox <
[email protected]
> 2001-2002
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
10
*/
11
12
#include <linux/errno.h>
13
#include <
linux/init.h
>
14
#include <
linux/interrupt.h
>
15
#include <
linux/ioport.h
>
16
#include <linux/module.h>
17
#include <linux/serial_core.h>
18
#include <linux/signal.h>
19
#include <linux/types.h>
20
21
#include <
asm/hardware.h
>
22
#include <
asm/parisc-device.h
>
23
#include <asm/io.h>
24
25
#include "
8250.h
"
26
27
static
int
__init
serial_init_chip(
struct
parisc_device
*
dev
)
28
{
29
struct
uart_8250_port
uart
;
30
unsigned
long
address
;
31
int
err
;
32
33
if
(!dev->
irq
) {
34
/* We find some unattached serial ports by walking native
35
* busses. These should be silently ignored. Otherwise,
36
* what we have here is a missing parent device, so tell
37
* the user what they're missing.
38
*/
39
if
(
parisc_parent
(dev)->
id
.
hw_type
!=
HPHW_IOA
)
40
printk
(
KERN_INFO
41
"Serial: device 0x%llx not configured.\n"
42
"Enable support for Wax, Lasi, Asp or Dino.\n"
,
43
(
unsigned
long
long
)dev->
hpa
.start);
44
return
-
ENODEV
;
45
}
46
47
address = dev->
hpa
.start;
48
if
(dev->
id
.sversion != 0x8d)
49
address += 0x800;
50
51
memset
(&
uart
, 0,
sizeof
(
uart
));
52
uart
.port.iotype =
UPIO_MEM
;
53
/* 7.272727MHz on Lasi. Assumed the same for Dino, Wax and Timi. */
54
uart
.port.uartclk = 7272727;
55
uart
.port.mapbase =
address
;
56
uart
.port.membase =
ioremap_nocache
(address, 16);
57
uart
.port.irq = dev->
irq
;
58
uart
.port.flags =
UPF_BOOT_AUTOCONF
;
59
uart
.port.dev = &dev->
dev
;
60
61
err =
serial8250_register_8250_port
(&
uart
);
62
if
(err < 0) {
63
printk
(
KERN_WARNING
64
"serial8250_register_8250_port returned error %d\n"
, err);
65
iounmap
(
uart
.port.membase);
66
return
err
;
67
}
68
69
return
0;
70
}
71
72
static
struct
parisc_device_id
serial_tbl[] = {
73
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
,
HVERSION_ANY_ID
, 0x00075 },
74
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
,
HVERSION_ANY_ID
, 0x0008c },
75
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
,
HVERSION_ANY_ID
, 0x0008d },
76
{ 0 }
77
};
78
79
/* Hack. Some machines have SERIAL_0 attached to Lasi and SERIAL_1
80
* attached to Dino. Unfortunately, Dino appears before Lasi in the device
81
* tree. To ensure that ttyS0 == SERIAL_0, we register two drivers; one
82
* which only knows about Lasi and then a second which will find all the
83
* other serial ports. HPUX ignores this problem.
84
*/
85
static
struct
parisc_device_id
lasi_tbl[] = {
86
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
, 0x03B, 0x0008C },
/* C1xx/C1xxL */
87
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
, 0x03C, 0x0008C },
/* B132L */
88
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
, 0x03D, 0x0008C },
/* B160L */
89
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
, 0x03E, 0x0008C },
/* B132L+ */
90
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
, 0x03F, 0x0008C },
/* B180L+ */
91
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
, 0x046, 0x0008C },
/* Rocky2 120 */
92
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
, 0x047, 0x0008C },
/* Rocky2 150 */
93
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
, 0x04E, 0x0008C },
/* Kiji L2 132 */
94
{
HPHW_FIO
,
HVERSION_REV_ANY_ID
, 0x056, 0x0008C },
/* Raven+ */
95
{ 0 }
96
};
97
98
99
MODULE_DEVICE_TABLE
(parisc, serial_tbl);
100
101
static
struct
parisc_driver
lasi_driver
= {
102
.name =
"serial_1"
,
103
.id_table = lasi_tbl,
104
.probe = serial_init_chip,
105
};
106
107
static
struct
parisc_driver
serial_driver
= {
108
.name =
"serial"
,
109
.id_table = serial_tbl,
110
.probe = serial_init_chip,
111
};
112
113
static
int
__init
probe_serial_gsc(
void
)
114
{
115
register_parisc_driver
(&lasi_driver);
116
register_parisc_driver
(&serial_driver);
117
return
0;
118
}
119
120
module_init
(probe_serial_gsc);
121
122
MODULE_LICENSE
(
"GPL"
);
Generated on Thu Jan 10 2013 14:34:04 for Linux Kernel by
1.8.2