17 #include <linux/kernel.h>
19 #include <linux/slab.h>
20 #include <linux/module.h>
21 #include <linux/pci.h>
22 #include <linux/serial_core.h>
23 #include <linux/tty.h>
50 #define PCH_UART_DRIVER_DEVICE "ttyPCH"
59 #define PCH_UART_HANDLED_RX_INT (1<<((PCH_UART_HANDLED_RX_INT_SHIFT)<<1))
60 #define PCH_UART_HANDLED_TX_INT (1<<((PCH_UART_HANDLED_TX_INT_SHIFT)<<1))
61 #define PCH_UART_HANDLED_RX_ERR_INT (1<<((\
62 PCH_UART_HANDLED_RX_ERR_INT_SHIFT)<<1))
63 #define PCH_UART_HANDLED_RX_TRG_INT (1<<((\
64 PCH_UART_HANDLED_RX_TRG_INT_SHIFT)<<1))
65 #define PCH_UART_HANDLED_MS_INT (1<<((PCH_UART_HANDLED_MS_INT_SHIFT)<<1))
67 #define PCH_UART_HANDLED_LS_INT (1<<((PCH_UART_HANDLED_LS_INT_SHIFT)<<1))
69 #define PCH_UART_RBR 0x00
70 #define PCH_UART_THR 0x00
72 #define PCH_UART_IER_MASK (PCH_UART_IER_ERBFI|PCH_UART_IER_ETBEI|\
73 PCH_UART_IER_ELSI|PCH_UART_IER_EDSSI)
74 #define PCH_UART_IER_ERBFI 0x00000001
75 #define PCH_UART_IER_ETBEI 0x00000002
76 #define PCH_UART_IER_ELSI 0x00000004
77 #define PCH_UART_IER_EDSSI 0x00000008
79 #define PCH_UART_IIR_IP 0x00000001
80 #define PCH_UART_IIR_IID 0x00000006
81 #define PCH_UART_IIR_MSI 0x00000000
82 #define PCH_UART_IIR_TRI 0x00000002
83 #define PCH_UART_IIR_RRI 0x00000004
84 #define PCH_UART_IIR_REI 0x00000006
85 #define PCH_UART_IIR_TOI 0x00000008
86 #define PCH_UART_IIR_FIFO256 0x00000020
87 #define PCH_UART_IIR_FIFO64 PCH_UART_IIR_FIFO256
88 #define PCH_UART_IIR_FE 0x000000C0
90 #define PCH_UART_FCR_FIFOE 0x00000001
91 #define PCH_UART_FCR_RFR 0x00000002
92 #define PCH_UART_FCR_TFR 0x00000004
93 #define PCH_UART_FCR_DMS 0x00000008
94 #define PCH_UART_FCR_FIFO256 0x00000020
95 #define PCH_UART_FCR_RFTL 0x000000C0
97 #define PCH_UART_FCR_RFTL1 0x00000000
98 #define PCH_UART_FCR_RFTL64 0x00000040
99 #define PCH_UART_FCR_RFTL128 0x00000080
100 #define PCH_UART_FCR_RFTL224 0x000000C0
101 #define PCH_UART_FCR_RFTL16 PCH_UART_FCR_RFTL64
102 #define PCH_UART_FCR_RFTL32 PCH_UART_FCR_RFTL128
103 #define PCH_UART_FCR_RFTL56 PCH_UART_FCR_RFTL224
104 #define PCH_UART_FCR_RFTL4 PCH_UART_FCR_RFTL64
105 #define PCH_UART_FCR_RFTL8 PCH_UART_FCR_RFTL128
106 #define PCH_UART_FCR_RFTL14 PCH_UART_FCR_RFTL224
107 #define PCH_UART_FCR_RFTL_SHIFT 6
109 #define PCH_UART_LCR_WLS 0x00000003
110 #define PCH_UART_LCR_STB 0x00000004
111 #define PCH_UART_LCR_PEN 0x00000008
112 #define PCH_UART_LCR_EPS 0x00000010
113 #define PCH_UART_LCR_SP 0x00000020
114 #define PCH_UART_LCR_SB 0x00000040
115 #define PCH_UART_LCR_DLAB 0x00000080
116 #define PCH_UART_LCR_NP 0x00000000
117 #define PCH_UART_LCR_OP PCH_UART_LCR_PEN
118 #define PCH_UART_LCR_EP (PCH_UART_LCR_PEN | PCH_UART_LCR_EPS)
119 #define PCH_UART_LCR_1P (PCH_UART_LCR_PEN | PCH_UART_LCR_SP)
120 #define PCH_UART_LCR_0P (PCH_UART_LCR_PEN | PCH_UART_LCR_EPS |\
123 #define PCH_UART_LCR_5BIT 0x00000000
124 #define PCH_UART_LCR_6BIT 0x00000001
125 #define PCH_UART_LCR_7BIT 0x00000002
126 #define PCH_UART_LCR_8BIT 0x00000003
128 #define PCH_UART_MCR_DTR 0x00000001
129 #define PCH_UART_MCR_RTS 0x00000002
130 #define PCH_UART_MCR_OUT 0x0000000C
131 #define PCH_UART_MCR_LOOP 0x00000010
132 #define PCH_UART_MCR_AFE 0x00000020
134 #define PCH_UART_LSR_DR 0x00000001
135 #define PCH_UART_LSR_ERR (1<<7)
137 #define PCH_UART_MSR_DCTS 0x00000001
138 #define PCH_UART_MSR_DDSR 0x00000002
139 #define PCH_UART_MSR_TERI 0x00000004
140 #define PCH_UART_MSR_DDCD 0x00000008
141 #define PCH_UART_MSR_CTS 0x00000010
142 #define PCH_UART_MSR_DSR 0x00000020
143 #define PCH_UART_MSR_RI 0x00000040
144 #define PCH_UART_MSR_DCD 0x00000080
145 #define PCH_UART_MSR_DELTA (PCH_UART_MSR_DCTS | PCH_UART_MSR_DDSR |\
146 PCH_UART_MSR_TERI | PCH_UART_MSR_DDCD)
148 #define PCH_UART_DLL 0x00
149 #define PCH_UART_DLM 0x01
151 #define PCH_UART_BRCSR 0x0E
153 #define PCH_UART_IID_RLS (PCH_UART_IIR_REI)
154 #define PCH_UART_IID_RDR (PCH_UART_IIR_RRI)
155 #define PCH_UART_IID_RDR_TO (PCH_UART_IIR_RRI | PCH_UART_IIR_TOI)
156 #define PCH_UART_IID_THRE (PCH_UART_IIR_TRI)
157 #define PCH_UART_IID_MS (PCH_UART_IIR_MSI)
159 #define PCH_UART_HAL_PARITY_NONE (PCH_UART_LCR_NP)
160 #define PCH_UART_HAL_PARITY_ODD (PCH_UART_LCR_OP)
161 #define PCH_UART_HAL_PARITY_EVEN (PCH_UART_LCR_EP)
162 #define PCH_UART_HAL_PARITY_FIX1 (PCH_UART_LCR_1P)
163 #define PCH_UART_HAL_PARITY_FIX0 (PCH_UART_LCR_0P)
164 #define PCH_UART_HAL_5BIT (PCH_UART_LCR_5BIT)
165 #define PCH_UART_HAL_6BIT (PCH_UART_LCR_6BIT)
166 #define PCH_UART_HAL_7BIT (PCH_UART_LCR_7BIT)
167 #define PCH_UART_HAL_8BIT (PCH_UART_LCR_8BIT)
168 #define PCH_UART_HAL_STB1 0
169 #define PCH_UART_HAL_STB2 (PCH_UART_LCR_STB)
171 #define PCH_UART_HAL_CLR_TX_FIFO (PCH_UART_FCR_TFR)
172 #define PCH_UART_HAL_CLR_RX_FIFO (PCH_UART_FCR_RFR)
173 #define PCH_UART_HAL_CLR_ALL_FIFO (PCH_UART_HAL_CLR_TX_FIFO | \
174 PCH_UART_HAL_CLR_RX_FIFO)
176 #define PCH_UART_HAL_DMA_MODE0 0
177 #define PCH_UART_HAL_FIFO_DIS 0
178 #define PCH_UART_HAL_FIFO16 (PCH_UART_FCR_FIFOE)
179 #define PCH_UART_HAL_FIFO256 (PCH_UART_FCR_FIFOE | \
180 PCH_UART_FCR_FIFO256)
181 #define PCH_UART_HAL_FIFO64 (PCH_UART_HAL_FIFO256)
182 #define PCH_UART_HAL_TRIGGER1 (PCH_UART_FCR_RFTL1)
183 #define PCH_UART_HAL_TRIGGER64 (PCH_UART_FCR_RFTL64)
184 #define PCH_UART_HAL_TRIGGER128 (PCH_UART_FCR_RFTL128)
185 #define PCH_UART_HAL_TRIGGER224 (PCH_UART_FCR_RFTL224)
186 #define PCH_UART_HAL_TRIGGER16 (PCH_UART_FCR_RFTL16)
187 #define PCH_UART_HAL_TRIGGER32 (PCH_UART_FCR_RFTL32)
188 #define PCH_UART_HAL_TRIGGER56 (PCH_UART_FCR_RFTL56)
189 #define PCH_UART_HAL_TRIGGER4 (PCH_UART_FCR_RFTL4)
190 #define PCH_UART_HAL_TRIGGER8 (PCH_UART_FCR_RFTL8)
191 #define PCH_UART_HAL_TRIGGER14 (PCH_UART_FCR_RFTL14)
192 #define PCH_UART_HAL_TRIGGER_L (PCH_UART_FCR_RFTL64)
193 #define PCH_UART_HAL_TRIGGER_M (PCH_UART_FCR_RFTL128)
194 #define PCH_UART_HAL_TRIGGER_H (PCH_UART_FCR_RFTL224)
196 #define PCH_UART_HAL_RX_INT (PCH_UART_IER_ERBFI)
197 #define PCH_UART_HAL_TX_INT (PCH_UART_IER_ETBEI)
198 #define PCH_UART_HAL_RX_ERR_INT (PCH_UART_IER_ELSI)
199 #define PCH_UART_HAL_MS_INT (PCH_UART_IER_EDSSI)
200 #define PCH_UART_HAL_ALL_INT (PCH_UART_IER_MASK)
202 #define PCH_UART_HAL_DTR (PCH_UART_MCR_DTR)
203 #define PCH_UART_HAL_RTS (PCH_UART_MCR_RTS)
204 #define PCH_UART_HAL_OUT (PCH_UART_MCR_OUT)
205 #define PCH_UART_HAL_LOOP (PCH_UART_MCR_LOOP)
206 #define PCH_UART_HAL_AFE (PCH_UART_MCR_AFE)
208 #define PCI_VENDOR_ID_ROHM 0x10DB
210 #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
212 #define DEFAULT_UARTCLK 1843200
213 #define CMITC_UARTCLK 192000000
214 #define FRI2_64_UARTCLK 64000000
215 #define FRI2_48_UARTCLK 48000000
216 #define NTC1_UARTCLK 64000000
299 #ifdef CONFIG_SERIAL_PCH_UART_CONSOLE
302 static unsigned int default_baud = 9600;
303 static unsigned int user_uartclk = 0;
304 static const int trigger_level_256[4] = { 1, 64, 128, 224 };
305 static const int trigger_level_64[4] = { 1, 16, 32, 56 };
306 static const int trigger_level_16[4] = { 1, 4, 8, 14 };
307 static const int trigger_level_1[4] = { 1, 1, 1, 1 };
309 #ifdef CONFIG_DEBUG_FS
311 #define PCH_REGS_BUFSIZE 1024
314 static ssize_t port_show_regs(
struct file *
file,
char __user *user_buf,
315 size_t count, loff_t *ppos)
327 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
328 "PCH EG20T port[%d] regs:\n", priv->
port.line);
330 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
331 "=================================\n");
332 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
334 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
336 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
338 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
340 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
342 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
344 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
350 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
352 len +=
snprintf(buf + len, PCH_REGS_BUFSIZE - len,
356 if (len > PCH_REGS_BUFSIZE)
357 len = PCH_REGS_BUFSIZE;
367 .read = port_show_regs,
373 static int pch_uart_get_uartclk(
void)
381 if (cmp &&
strstr(cmp,
"CM-iTC"))
385 if (cmp &&
strnstr(cmp,
"FRI2", 4))
389 if (cmp &&
strstr(cmp,
"Fish River Island II"))
394 if (cmp && (
strstr(cmp,
"COMe-mTT") ||
395 strstr(cmp,
"nanoETXexpress-TT")))
401 static void pch_uart_hal_enable_interrupt(
struct eg20t_port *priv,
409 static void pch_uart_hal_disable_interrupt(
struct eg20t_port *priv,
417 static int pch_uart_hal_set_line(
struct eg20t_port *priv,
int baud,
418 unsigned int parity,
unsigned int bits,
426 dev_err(priv->
port.dev,
"Invalid Baud(div=0x%x)\n", div);
430 dll = (
unsigned int)div & 0x00FFU;
431 dlm = ((
unsigned int)div >> 8) & 0x00FF
U;
434 dev_err(priv->
port.dev,
"Invalid parity(0x%x)\n", parity);
439 dev_err(priv->
port.dev,
"Invalid bits(0x%x)\n", bits);
444 dev_err(priv->
port.dev,
"Invalid STB(0x%x)\n", stb);
452 dev_dbg(priv->
port.dev,
"%s:baud = %d, div = %04x, lcr = %02x (%lu)\n",
453 __func__, baud, div, lcr, jiffies);
462 static int pch_uart_hal_fifo_reset(
struct eg20t_port *priv,
479 static int pch_uart_hal_set_fifo(
struct eg20t_port *priv,
480 unsigned int dmamode,
486 dev_err(priv->
port.dev,
"%s:Invalid DMA Mode(0x%x)\n",
492 dev_err(priv->
port.dev,
"%s:Invalid FIFO SIZE(0x%x)\n",
493 __func__, fifo_size);
498 dev_err(priv->
port.dev,
"%s:Invalid TRIGGER(0x%x)\n",
532 static u8 pch_uart_hal_get_modem(
struct eg20t_port *priv)
539 static void pch_uart_hal_write(
struct eg20t_port *priv,
540 const unsigned char *buf,
int tx_size)
545 for (i = 0; i < tx_size;) {
551 static int pch_uart_hal_read(
struct eg20t_port *priv,
unsigned char *buf,
567 static unsigned char pch_uart_hal_get_iid(
struct eg20t_port *priv)
573 static u8 pch_uart_hal_get_line_status(
struct eg20t_port *priv)
578 static void pch_uart_hal_set_break(
struct eg20t_port *priv,
int on)
591 static int push_rx(
struct eg20t_port *priv,
const unsigned char *buf,
600 dev_dbg(priv->
port.dev,
"%s:tty is busy now", __func__);
604 tty_insert_flip_string(tty, buf, size);
611 static int pop_tx_x(
struct eg20t_port *priv,
unsigned char *buf)
617 dev_dbg(priv->
port.dev,
"%s:X character send %02x (%lu)\n",
618 __func__, port->
x_char, jiffies);
627 static int dma_push_rx(
struct eg20t_port *priv,
int size)
636 dev_dbg(priv->
port.dev,
"%s:tty is busy now", __func__);
643 dev_warn(port->
dev,
"Rx overrun: dropping %u bytes\n",
648 tty_insert_flip_string(tty, sg_virt(&priv->
sg_rx), size);
656 static void pch_free_dma(
struct uart_port *port)
693 static void pch_request_dma(
struct uart_port *port)
715 dev_err(priv->
port.dev,
"%s:dma_request_channel FAILS(Tx)\n",
729 dev_err(priv->
port.dev,
"%s:dma_request_channel FAILS(Rx)\n",
742 static void pch_dma_rx_complete(
void *
arg)
750 dev_dbg(priv->
port.dev,
"%s:tty is busy now", __func__);
764 static void pch_dma_tx_complete(
void *arg)
772 for (i = 0; i < priv->
nent; i++, sg++) {
785 static int pop_tx(
struct eg20t_port *priv,
int size)
797 int sz =
min(size - count, cnt_to_end);
798 pch_uart_hal_write(priv, &xmit->
buf[xmit->
tail], sz);
804 dev_dbg(priv->
port.dev,
"%d characters. Remained %d characters.(%lu)\n",
805 count, size - count, jiffies);
810 static int handle_rx_to(
struct eg20t_port *priv)
822 rx_size = pch_uart_hal_read(priv, buf->
buf, buf->
size);
823 ret = push_rx(priv, buf->
buf, rx_size);
826 }
while (rx_size == buf->
size);
833 return handle_rx_to(priv);
836 static int dma_handle_rx(
struct eg20t_port *priv)
855 desc = dmaengine_prep_slave_sg(priv->
chan_rx,
863 desc->
callback = pch_dma_rx_complete;
866 dma_async_issue_pending(priv->
chan_rx);
871 static unsigned int handle_tx(
struct eg20t_port *priv)
881 dev_info(priv->
port.dev,
"%s:Tx isn't started. (%lu)\n",
890 if (pop_tx_x(priv, xmit->
buf)) {
891 pch_uart_hal_write(priv, xmit->
buf, 1);
900 tx_size = pop_tx(priv, size);
902 port->
icount.tx += tx_size;
916 static unsigned int dma_handle_tx(
struct eg20t_port *priv)
932 dev_info(priv->
port.dev,
"%s:Tx isn't started. (%lu)\n",
940 dev_dbg(priv->
port.dev,
"%s:Tx is not completed. (%lu)\n",
949 if (pop_tx_x(priv, xmit->
buf)) {
950 pch_uart_hal_write(priv, xmit->
buf, 1);
960 dev_dbg(priv->
port.dev,
"%s 0 bytes return\n", __func__);
966 if (bytes > fifo_size) {
967 num = bytes / fifo_size + 1;
976 dev_dbg(priv->
port.dev,
"%s num=%d size=%d rem=%d\n",
977 __func__, num, size, rem);
983 dev_err(priv->
port.dev,
"%s:kzalloc Failed\n", __func__);
990 for (i = 0; i < num; i++, sg++) {
996 size, fifo_size * i);
1002 dev_err(priv->
port.dev,
"%s:dma_map_sg Failed\n", __func__);
1007 for (i = 0; i < nent; i++, sg++) {
1012 if (i == (nent - 1))
1018 desc = dmaengine_prep_slave_sg(priv->
chan_tx,
1022 dev_err(priv->
port.dev,
"%s:device_prep_slave_sg Failed\n",
1028 desc->
callback = pch_dma_tx_complete;
1033 dma_async_issue_pending(priv->
chan_tx);
1038 static void pch_uart_err_ir(
struct eg20t_port *priv,
unsigned int lsr)
1047 dev_err(&priv->
pdev->dev,
"Error data in FIFO\n");
1062 unsigned int handled;
1066 unsigned long flags;
1073 iid = pch_uart_hal_get_iid(priv);
1078 lsr = pch_uart_hal_get_line_status(priv);
1079 if (lsr & (PCH_UART_LSR_ERR | UART_LSR_FE |
1081 pch_uart_err_ir(priv, lsr);
1089 pch_uart_hal_disable_interrupt(priv,
1092 ret = dma_handle_rx(priv);
1094 pch_uart_hal_enable_interrupt(priv,
1098 ret = handle_rx(priv);
1103 ret = handle_rx_to(priv);
1108 ret = dma_handle_tx(priv);
1110 ret = handle_tx(priv);
1113 msr = pch_uart_hal_get_modem(priv);
1121 dev_err(priv->
port.dev,
"%s:iid=%02x (%lu)\n", __func__,
1127 handled |= (
unsigned int)ret;
1130 spin_unlock_irqrestore(&priv->
lock, flags);
1136 static unsigned int pch_uart_tx_empty(
struct uart_port *port)
1148 static unsigned int pch_uart_get_mctrl(
struct uart_port *port)
1152 unsigned int ret = 0;
1155 modem = pch_uart_hal_get_modem(priv);
1172 static void pch_uart_set_mctrl(
struct uart_port *port,
unsigned int mctrl)
1191 static void pch_uart_stop_tx(
struct uart_port *port)
1199 static void pch_uart_start_tx(
struct uart_port *port)
1207 dev_dbg(priv->
port.dev,
"%s : Tx DMA is NOT empty.\n",
1217 static void pch_uart_stop_rx(
struct uart_port *port)
1227 static void pch_uart_enable_ms(
struct uart_port *port)
1235 static void pch_uart_break_ctl(
struct uart_port *port,
int ctl)
1238 unsigned long flags;
1242 pch_uart_hal_set_break(priv, ctl);
1243 spin_unlock_irqrestore(&priv->
lock, flags);
1247 static int pch_uart_startup(
struct uart_port *port)
1263 ret = pch_uart_hal_set_line(priv, default_baud,
1308 KBUILD_MODNAME, priv);
1313 pch_request_dma(port);
1323 static void pch_uart_shutdown(
struct uart_port *port)
1335 "pch_uart_hal_set_fifo Failed(ret=%d)\n", ret);
1345 static void pch_uart_set_termios(
struct uart_port *port,
1350 unsigned int parity,
bits, stb;
1352 unsigned long flags;
1394 spin_lock(&port->
lock);
1397 rtn = pch_uart_hal_set_line(priv, baud, parity, bits, stb);
1401 pch_uart_set_mctrl(&priv->
port, priv->
port.mctrl);
1407 spin_unlock(&port->
lock);
1408 spin_unlock_irqrestore(&priv->
lock, flags);
1411 static const char *pch_uart_type(
struct uart_port *port)
1413 return KBUILD_MODNAME;
1416 static void pch_uart_release_port(
struct uart_port *port)
1425 static int pch_uart_request_port(
struct uart_port *port)
1436 membase = pci_iomap(priv->
pdev, 1, 0);
1446 static void pch_uart_config_port(
struct uart_port *port,
int type)
1453 pch_uart_request_port(port);
1457 static int pch_uart_verify_port(
struct uart_port *port,
1465 "PCH UART : Use PIO Mode (without DMA)\n");
1469 #ifndef CONFIG_PCH_DMA
1470 dev_err(priv->
port.dev,
"%s : PCH DMA is not Loaded.\n",
1476 pch_request_dma(port);
1483 static struct uart_ops pch_uart_ops = {
1484 .tx_empty = pch_uart_tx_empty,
1485 .set_mctrl = pch_uart_set_mctrl,
1486 .get_mctrl = pch_uart_get_mctrl,
1487 .stop_tx = pch_uart_stop_tx,
1488 .start_tx = pch_uart_start_tx,
1489 .stop_rx = pch_uart_stop_rx,
1490 .enable_ms = pch_uart_enable_ms,
1491 .break_ctl = pch_uart_break_ctl,
1492 .startup = pch_uart_startup,
1493 .shutdown = pch_uart_shutdown,
1494 .set_termios = pch_uart_set_termios,
1497 .type = pch_uart_type,
1498 .release_port = pch_uart_release_port,
1499 .request_port = pch_uart_request_port,
1500 .config_port = pch_uart_config_port,
1501 .verify_port = pch_uart_verify_port
1504 #ifdef CONFIG_SERIAL_PCH_UART_CONSOLE
1511 unsigned int status, tmout = 10000;
1517 if ((status & bits) == bits)
1527 for (tmout = 1000000; tmout; tmout--) {
1537 static void pch_console_putchar(
struct uart_port *port,
int ch)
1553 pch_console_write(
struct console *co,
const char *
s,
unsigned int count)
1556 unsigned long flags;
1557 int priv_locked = 1;
1558 int port_locked = 1;
1561 priv = pch_uart_ports[co->
index];
1566 if (priv->
port.sysrq) {
1567 spin_lock(&priv->
lock);
1571 priv_locked = spin_trylock(&priv->
lock);
1572 port_locked = spin_trylock(&priv->
port.lock);
1574 spin_lock(&priv->
lock);
1575 spin_lock(&priv->
port.lock);
1595 spin_unlock(&priv->
port.lock);
1597 spin_unlock(&priv->
lock);
1604 int baud = default_baud;
1616 port = &pch_uart_ports[co->
index]->
port;
1621 port->
uartclk = pch_uart_get_uartclk();
1631 static struct console pch_console = {
1633 .write = pch_console_write,
1635 .setup = pch_console_setup,
1638 .data = &pch_uart_driver,
1641 #define PCH_CONSOLE (&pch_console)
1643 #define PCH_CONSOLE NULL
1648 .driver_name = KBUILD_MODNAME,
1663 unsigned char *
rxbuf;
1669 board = &drv_dat[
id->driver_data];
1674 goto init_port_alloc_err;
1678 goto init_port_free_txbuf;
1680 switch (port_type) {
1688 dev_err(&pdev->
dev,
"Invalid Port Type(=%d)\n", port_type);
1689 goto init_port_hal_free;
1692 pci_enable_msi(pdev);
1703 priv->
rxbuf.buf = rxbuf;
1707 priv->
uartclk = pch_uart_get_uartclk();
1712 priv->
port.mapbase = mapbase;
1715 priv->
port.ops = &pch_uart_ops;
1717 priv->
port.fifosize = fifosize;
1723 pci_set_drvdata(pdev, priv);
1727 #ifdef CONFIG_SERIAL_PCH_UART_CONSOLE
1732 goto init_port_hal_free;
1734 #ifdef CONFIG_DEBUG_FS
1737 NULL, priv, &port_regs_ops);
1743 #ifdef CONFIG_SERIAL_PCH_UART_CONSOLE
1747 init_port_free_txbuf:
1749 init_port_alloc_err:
1754 static void pch_uart_exit_port(
struct eg20t_port *priv)
1757 #ifdef CONFIG_DEBUG_FS
1766 static void pch_uart_pci_remove(
struct pci_dev *pdev)
1768 struct eg20t_port *priv = pci_get_drvdata(pdev);
1772 #ifdef CONFIG_SERIAL_PCH_UART_CONSOLE
1773 pch_uart_ports[priv->
port.line] =
NULL;
1775 pch_uart_exit_port(priv);
1783 struct eg20t_port *priv = pci_get_drvdata(pdev);
1794 struct eg20t_port *priv = pci_get_drvdata(pdev);
1803 "%s-pci_enable_device failed(ret=%d) ", __func__, ret);
1812 #define pch_uart_pci_suspend NULL
1813 #define pch_uart_pci_resume NULL
1852 priv = pch_uart_init_port(pdev,
id);
1855 goto probe_disable_device;
1857 pci_set_drvdata(pdev, priv);
1861 probe_disable_device:
1868 static struct pci_driver pch_uart_pci_driver = {
1870 .id_table = pch_uart_pci_id,
1871 .probe = pch_uart_pci_probe,
1877 static int __init pch_uart_module_init(
void)
1887 ret = pci_register_driver(&pch_uart_pci_driver);
1895 static void __exit pch_uart_module_exit(
void)
1906 "Default BAUD for initial driver state and console (default 9600)");
1909 "Override UART default or board specific UART clock");