mirror of https://gitee.com/openkylin/linux.git
Merge rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
bf164c790d
|
@ -107,8 +107,8 @@ hardware.
|
|||
indicate that the signal is permanently active. If RI is
|
||||
not available, the signal should not be indicated as active.
|
||||
|
||||
Locking: none.
|
||||
Interrupts: caller dependent.
|
||||
Locking: port->lock taken.
|
||||
Interrupts: locally disabled.
|
||||
This call must not sleep
|
||||
|
||||
stop_tx(port,tty_stop)
|
||||
|
|
|
@ -30,9 +30,6 @@ extern void __lshrdi3(void);
|
|||
extern void __modsi3(void);
|
||||
extern void __muldi3(void);
|
||||
extern void __ucmpdi2(void);
|
||||
extern void __udivdi3(void);
|
||||
extern void __umoddi3(void);
|
||||
extern void __udivmoddi4(void);
|
||||
extern void __udivsi3(void);
|
||||
extern void __umodsi3(void);
|
||||
extern void __do_div64(void);
|
||||
|
@ -134,9 +131,6 @@ EXPORT_SYMBOL(__lshrdi3);
|
|||
EXPORT_SYMBOL(__modsi3);
|
||||
EXPORT_SYMBOL(__muldi3);
|
||||
EXPORT_SYMBOL(__ucmpdi2);
|
||||
EXPORT_SYMBOL(__udivdi3);
|
||||
EXPORT_SYMBOL(__umoddi3);
|
||||
EXPORT_SYMBOL(__udivmoddi4);
|
||||
EXPORT_SYMBOL(__udivsi3);
|
||||
EXPORT_SYMBOL(__umodsi3);
|
||||
EXPORT_SYMBOL(__do_div64);
|
||||
|
|
|
@ -359,7 +359,8 @@ void cpu_init(void)
|
|||
"I" (offsetof(struct stack, abt[0])),
|
||||
"I" (PSR_F_BIT | PSR_I_BIT | UND_MODE),
|
||||
"I" (offsetof(struct stack, und[0])),
|
||||
"I" (PSR_F_BIT | PSR_I_BIT | SVC_MODE));
|
||||
"I" (PSR_F_BIT | PSR_I_BIT | SVC_MODE)
|
||||
: "r14");
|
||||
}
|
||||
|
||||
static struct machine_desc * __init setup_machine(unsigned int nr)
|
||||
|
|
|
@ -502,3 +502,126 @@ int __init setup_profiling_timer(unsigned int multiplier)
|
|||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int
|
||||
on_each_cpu_mask(void (*func)(void *), void *info, int retry, int wait,
|
||||
cpumask_t mask)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
preempt_disable();
|
||||
|
||||
ret = smp_call_function_on_cpu(func, info, retry, wait, mask);
|
||||
if (cpu_isset(smp_processor_id(), mask))
|
||||
func(info);
|
||||
|
||||
preempt_enable();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**********************************************************************/
|
||||
|
||||
/*
|
||||
* TLB operations
|
||||
*/
|
||||
struct tlb_args {
|
||||
struct vm_area_struct *ta_vma;
|
||||
unsigned long ta_start;
|
||||
unsigned long ta_end;
|
||||
};
|
||||
|
||||
static inline void ipi_flush_tlb_all(void *ignored)
|
||||
{
|
||||
local_flush_tlb_all();
|
||||
}
|
||||
|
||||
static inline void ipi_flush_tlb_mm(void *arg)
|
||||
{
|
||||
struct mm_struct *mm = (struct mm_struct *)arg;
|
||||
|
||||
local_flush_tlb_mm(mm);
|
||||
}
|
||||
|
||||
static inline void ipi_flush_tlb_page(void *arg)
|
||||
{
|
||||
struct tlb_args *ta = (struct tlb_args *)arg;
|
||||
|
||||
local_flush_tlb_page(ta->ta_vma, ta->ta_start);
|
||||
}
|
||||
|
||||
static inline void ipi_flush_tlb_kernel_page(void *arg)
|
||||
{
|
||||
struct tlb_args *ta = (struct tlb_args *)arg;
|
||||
|
||||
local_flush_tlb_kernel_page(ta->ta_start);
|
||||
}
|
||||
|
||||
static inline void ipi_flush_tlb_range(void *arg)
|
||||
{
|
||||
struct tlb_args *ta = (struct tlb_args *)arg;
|
||||
|
||||
local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end);
|
||||
}
|
||||
|
||||
static inline void ipi_flush_tlb_kernel_range(void *arg)
|
||||
{
|
||||
struct tlb_args *ta = (struct tlb_args *)arg;
|
||||
|
||||
local_flush_tlb_kernel_range(ta->ta_start, ta->ta_end);
|
||||
}
|
||||
|
||||
void flush_tlb_all(void)
|
||||
{
|
||||
on_each_cpu(ipi_flush_tlb_all, NULL, 1, 1);
|
||||
}
|
||||
|
||||
void flush_tlb_mm(struct mm_struct *mm)
|
||||
{
|
||||
cpumask_t mask = mm->cpu_vm_mask;
|
||||
|
||||
on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, 1, mask);
|
||||
}
|
||||
|
||||
void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
|
||||
{
|
||||
cpumask_t mask = vma->vm_mm->cpu_vm_mask;
|
||||
struct tlb_args ta;
|
||||
|
||||
ta.ta_vma = vma;
|
||||
ta.ta_start = uaddr;
|
||||
|
||||
on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, 1, mask);
|
||||
}
|
||||
|
||||
void flush_tlb_kernel_page(unsigned long kaddr)
|
||||
{
|
||||
struct tlb_args ta;
|
||||
|
||||
ta.ta_start = kaddr;
|
||||
|
||||
on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1, 1);
|
||||
}
|
||||
|
||||
void flush_tlb_range(struct vm_area_struct *vma,
|
||||
unsigned long start, unsigned long end)
|
||||
{
|
||||
cpumask_t mask = vma->vm_mm->cpu_vm_mask;
|
||||
struct tlb_args ta;
|
||||
|
||||
ta.ta_vma = vma;
|
||||
ta.ta_start = start;
|
||||
ta.ta_end = end;
|
||||
|
||||
on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, 1, mask);
|
||||
}
|
||||
|
||||
void flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
struct tlb_args ta;
|
||||
|
||||
ta.ta_start = start;
|
||||
ta.ta_end = end;
|
||||
|
||||
on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1, 1);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
|
|||
strnlen_user.o strchr.o strrchr.o testchangebit.o \
|
||||
testclearbit.o testsetbit.o uaccess.o getuser.o \
|
||||
putuser.o ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
|
||||
ucmpdi2.o udivdi3.o lib1funcs.o div64.o \
|
||||
ucmpdi2.o lib1funcs.o div64.o \
|
||||
io-readsb.o io-writesb.o io-readsl.o io-writesl.o
|
||||
|
||||
ifeq ($(CONFIG_CPU_32v3),y)
|
||||
|
|
|
@ -1,183 +0,0 @@
|
|||
/* longlong.h -- based on code from gcc-2.95.3
|
||||
|
||||
definitions for mixed size 32/64 bit arithmetic.
|
||||
Copyright (C) 1991, 92, 94, 95, 96, 1997, 1998 Free Software Foundation, Inc.
|
||||
|
||||
This definition file is free software; you can redistribute it
|
||||
and/or modify it under the terms of the GNU General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2, or (at your option) any later version.
|
||||
|
||||
This definition file 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Borrowed from GCC 2.95.3, I Molton 29/07/01 */
|
||||
|
||||
#ifndef SI_TYPE_SIZE
|
||||
#define SI_TYPE_SIZE 32
|
||||
#endif
|
||||
|
||||
#define __BITS4 (SI_TYPE_SIZE / 4)
|
||||
#define __ll_B (1L << (SI_TYPE_SIZE / 2))
|
||||
#define __ll_lowpart(t) ((u32) (t) % __ll_B)
|
||||
#define __ll_highpart(t) ((u32) (t) / __ll_B)
|
||||
|
||||
/* Define auxiliary asm macros.
|
||||
|
||||
1) umul_ppmm(high_prod, low_prod, multipler, multiplicand)
|
||||
multiplies two u32 integers MULTIPLER and MULTIPLICAND,
|
||||
and generates a two-part u32 product in HIGH_PROD and
|
||||
LOW_PROD.
|
||||
|
||||
2) __umulsidi3(a,b) multiplies two u32 integers A and B,
|
||||
and returns a u64 product. This is just a variant of umul_ppmm.
|
||||
|
||||
3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
|
||||
denominator) divides a two-word unsigned integer, composed by the
|
||||
integers HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and
|
||||
places the quotient in QUOTIENT and the remainder in REMAINDER.
|
||||
HIGH_NUMERATOR must be less than DENOMINATOR for correct operation.
|
||||
If, in addition, the most significant bit of DENOMINATOR must be 1,
|
||||
then the pre-processor symbol UDIV_NEEDS_NORMALIZATION is defined to 1.
|
||||
|
||||
4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
|
||||
denominator). Like udiv_qrnnd but the numbers are signed. The
|
||||
quotient is rounded towards 0.
|
||||
|
||||
5) count_leading_zeros(count, x) counts the number of zero-bits from
|
||||
the msb to the first non-zero bit. This is the number of steps X
|
||||
needs to be shifted left to set the msb. Undefined for X == 0.
|
||||
|
||||
6) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
|
||||
high_addend_2, low_addend_2) adds two two-word unsigned integers,
|
||||
composed by HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and
|
||||
LOW_ADDEND_2 respectively. The result is placed in HIGH_SUM and
|
||||
LOW_SUM. Overflow (i.e. carry out) is not stored anywhere, and is
|
||||
lost.
|
||||
|
||||
7) sub_ddmmss(high_difference, low_difference, high_minuend,
|
||||
low_minuend, high_subtrahend, low_subtrahend) subtracts two
|
||||
two-word unsigned integers, composed by HIGH_MINUEND_1 and
|
||||
LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and LOW_SUBTRAHEND_2
|
||||
respectively. The result is placed in HIGH_DIFFERENCE and
|
||||
LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
|
||||
and is lost.
|
||||
|
||||
If any of these macros are left undefined for a particular CPU,
|
||||
C macros are used. */
|
||||
|
||||
#if defined (__arm__)
|
||||
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("adds %1, %4, %5 \n\
|
||||
adc %0, %2, %3" \
|
||||
: "=r" ((u32) (sh)), \
|
||||
"=&r" ((u32) (sl)) \
|
||||
: "%r" ((u32) (ah)), \
|
||||
"rI" ((u32) (bh)), \
|
||||
"%r" ((u32) (al)), \
|
||||
"rI" ((u32) (bl)))
|
||||
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("subs %1, %4, %5 \n\
|
||||
sbc %0, %2, %3" \
|
||||
: "=r" ((u32) (sh)), \
|
||||
"=&r" ((u32) (sl)) \
|
||||
: "r" ((u32) (ah)), \
|
||||
"rI" ((u32) (bh)), \
|
||||
"r" ((u32) (al)), \
|
||||
"rI" ((u32) (bl)))
|
||||
#define umul_ppmm(xh, xl, a, b) \
|
||||
{register u32 __t0, __t1, __t2; \
|
||||
__asm__ ("%@ Inlined umul_ppmm \n\
|
||||
mov %2, %5, lsr #16 \n\
|
||||
mov %0, %6, lsr #16 \n\
|
||||
bic %3, %5, %2, lsl #16 \n\
|
||||
bic %4, %6, %0, lsl #16 \n\
|
||||
mul %1, %3, %4 \n\
|
||||
mul %4, %2, %4 \n\
|
||||
mul %3, %0, %3 \n\
|
||||
mul %0, %2, %0 \n\
|
||||
adds %3, %4, %3 \n\
|
||||
addcs %0, %0, #65536 \n\
|
||||
adds %1, %1, %3, lsl #16 \n\
|
||||
adc %0, %0, %3, lsr #16" \
|
||||
: "=&r" ((u32) (xh)), \
|
||||
"=r" ((u32) (xl)), \
|
||||
"=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
|
||||
: "r" ((u32) (a)), \
|
||||
"r" ((u32) (b)));}
|
||||
#define UMUL_TIME 20
|
||||
#define UDIV_TIME 100
|
||||
#endif /* __arm__ */
|
||||
|
||||
#define __umulsidi3(u, v) \
|
||||
({DIunion __w; \
|
||||
umul_ppmm (__w.s.high, __w.s.low, u, v); \
|
||||
__w.ll; })
|
||||
|
||||
#define __udiv_qrnnd_c(q, r, n1, n0, d) \
|
||||
do { \
|
||||
u32 __d1, __d0, __q1, __q0; \
|
||||
u32 __r1, __r0, __m; \
|
||||
__d1 = __ll_highpart (d); \
|
||||
__d0 = __ll_lowpart (d); \
|
||||
\
|
||||
__r1 = (n1) % __d1; \
|
||||
__q1 = (n1) / __d1; \
|
||||
__m = (u32) __q1 * __d0; \
|
||||
__r1 = __r1 * __ll_B | __ll_highpart (n0); \
|
||||
if (__r1 < __m) \
|
||||
{ \
|
||||
__q1--, __r1 += (d); \
|
||||
if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
|
||||
if (__r1 < __m) \
|
||||
__q1--, __r1 += (d); \
|
||||
} \
|
||||
__r1 -= __m; \
|
||||
\
|
||||
__r0 = __r1 % __d1; \
|
||||
__q0 = __r1 / __d1; \
|
||||
__m = (u32) __q0 * __d0; \
|
||||
__r0 = __r0 * __ll_B | __ll_lowpart (n0); \
|
||||
if (__r0 < __m) \
|
||||
{ \
|
||||
__q0--, __r0 += (d); \
|
||||
if (__r0 >= (d)) \
|
||||
if (__r0 < __m) \
|
||||
__q0--, __r0 += (d); \
|
||||
} \
|
||||
__r0 -= __m; \
|
||||
\
|
||||
(q) = (u32) __q1 * __ll_B | __q0; \
|
||||
(r) = __r0; \
|
||||
} while (0)
|
||||
|
||||
#define UDIV_NEEDS_NORMALIZATION 1
|
||||
#define udiv_qrnnd __udiv_qrnnd_c
|
||||
|
||||
#define count_leading_zeros(count, x) \
|
||||
do { \
|
||||
u32 __xr = (x); \
|
||||
u32 __a; \
|
||||
\
|
||||
if (SI_TYPE_SIZE <= 32) \
|
||||
{ \
|
||||
__a = __xr < ((u32)1<<2*__BITS4) \
|
||||
? (__xr < ((u32)1<<__BITS4) ? 0 : __BITS4) \
|
||||
: (__xr < ((u32)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
for (__a = SI_TYPE_SIZE - 8; __a > 0; __a -= 8) \
|
||||
if (((__xr >> __a) & 0xff) != 0) \
|
||||
break; \
|
||||
} \
|
||||
\
|
||||
(count) = SI_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \
|
||||
} while (0)
|
|
@ -1,222 +0,0 @@
|
|||
/* More subroutines needed by GCC output code on some machines. */
|
||||
/* Compile this one with gcc. */
|
||||
/* Copyright (C) 1989, 92-98, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU CC.
|
||||
|
||||
GNU CC is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU CC 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU CC; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* As a special exception, if you link this library with other files,
|
||||
some of which are compiled with GCC, to produce an executable,
|
||||
this library does not by itself cause the resulting executable
|
||||
to be covered by the GNU General Public License.
|
||||
This exception does not however invalidate any other reasons why
|
||||
the executable file might be covered by the GNU General Public License.
|
||||
*/
|
||||
/* support functions required by the kernel. based on code from gcc-2.95.3 */
|
||||
/* I Molton 29/07/01 */
|
||||
|
||||
#include "gcclib.h"
|
||||
#include "longlong.h"
|
||||
|
||||
static const u8 __clz_tab[] = {
|
||||
0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
|
||||
5, 5, 5, 5, 5, 5, 5, 5,
|
||||
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
6, 6, 6, 6, 6, 6, 6, 6,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8,
|
||||
};
|
||||
|
||||
u64 __udivmoddi4(u64 n, u64 d, u64 * rp)
|
||||
{
|
||||
DIunion ww;
|
||||
DIunion nn, dd;
|
||||
DIunion rr;
|
||||
u32 d0, d1, n0, n1, n2;
|
||||
u32 q0, q1;
|
||||
u32 b, bm;
|
||||
|
||||
nn.ll = n;
|
||||
dd.ll = d;
|
||||
|
||||
d0 = dd.s.low;
|
||||
d1 = dd.s.high;
|
||||
n0 = nn.s.low;
|
||||
n1 = nn.s.high;
|
||||
|
||||
if (d1 == 0) {
|
||||
if (d0 > n1) {
|
||||
/* 0q = nn / 0D */
|
||||
|
||||
count_leading_zeros(bm, d0);
|
||||
|
||||
if (bm != 0) {
|
||||
/* Normalize, i.e. make the most significant bit of the
|
||||
denominator set. */
|
||||
|
||||
d0 = d0 << bm;
|
||||
n1 = (n1 << bm) | (n0 >> (SI_TYPE_SIZE - bm));
|
||||
n0 = n0 << bm;
|
||||
}
|
||||
|
||||
udiv_qrnnd(q0, n0, n1, n0, d0);
|
||||
q1 = 0;
|
||||
|
||||
/* Remainder in n0 >> bm. */
|
||||
} else {
|
||||
/* qq = NN / 0d */
|
||||
|
||||
if (d0 == 0)
|
||||
d0 = 1 / d0; /* Divide intentionally by zero. */
|
||||
|
||||
count_leading_zeros(bm, d0);
|
||||
|
||||
if (bm == 0) {
|
||||
/* From (n1 >= d0) /\ (the most significant bit of d0 is set),
|
||||
conclude (the most significant bit of n1 is set) /\ (the
|
||||
leading quotient digit q1 = 1).
|
||||
|
||||
This special case is necessary, not an optimization.
|
||||
(Shifts counts of SI_TYPE_SIZE are undefined.) */
|
||||
|
||||
n1 -= d0;
|
||||
q1 = 1;
|
||||
} else {
|
||||
/* Normalize. */
|
||||
|
||||
b = SI_TYPE_SIZE - bm;
|
||||
|
||||
d0 = d0 << bm;
|
||||
n2 = n1 >> b;
|
||||
n1 = (n1 << bm) | (n0 >> b);
|
||||
n0 = n0 << bm;
|
||||
|
||||
udiv_qrnnd(q1, n1, n2, n1, d0);
|
||||
}
|
||||
|
||||
/* n1 != d0... */
|
||||
|
||||
udiv_qrnnd(q0, n0, n1, n0, d0);
|
||||
|
||||
/* Remainder in n0 >> bm. */
|
||||
}
|
||||
|
||||
if (rp != 0) {
|
||||
rr.s.low = n0 >> bm;
|
||||
rr.s.high = 0;
|
||||
*rp = rr.ll;
|
||||
}
|
||||
} else {
|
||||
if (d1 > n1) {
|
||||
/* 00 = nn / DD */
|
||||
|
||||
q0 = 0;
|
||||
q1 = 0;
|
||||
|
||||
/* Remainder in n1n0. */
|
||||
if (rp != 0) {
|
||||
rr.s.low = n0;
|
||||
rr.s.high = n1;
|
||||
*rp = rr.ll;
|
||||
}
|
||||
} else {
|
||||
/* 0q = NN / dd */
|
||||
|
||||
count_leading_zeros(bm, d1);
|
||||
if (bm == 0) {
|
||||
/* From (n1 >= d1) /\ (the most significant bit of d1 is set),
|
||||
conclude (the most significant bit of n1 is set) /\ (the
|
||||
quotient digit q0 = 0 or 1).
|
||||
|
||||
This special case is necessary, not an optimization. */
|
||||
|
||||
/* The condition on the next line takes advantage of that
|
||||
n1 >= d1 (true due to program flow). */
|
||||
if (n1 > d1 || n0 >= d0) {
|
||||
q0 = 1;
|
||||
sub_ddmmss(n1, n0, n1, n0, d1, d0);
|
||||
} else
|
||||
q0 = 0;
|
||||
|
||||
q1 = 0;
|
||||
|
||||
if (rp != 0) {
|
||||
rr.s.low = n0;
|
||||
rr.s.high = n1;
|
||||
*rp = rr.ll;
|
||||
}
|
||||
} else {
|
||||
u32 m1, m0;
|
||||
/* Normalize. */
|
||||
|
||||
b = SI_TYPE_SIZE - bm;
|
||||
|
||||
d1 = (d1 << bm) | (d0 >> b);
|
||||
d0 = d0 << bm;
|
||||
n2 = n1 >> b;
|
||||
n1 = (n1 << bm) | (n0 >> b);
|
||||
n0 = n0 << bm;
|
||||
|
||||
udiv_qrnnd(q0, n1, n2, n1, d1);
|
||||
umul_ppmm(m1, m0, q0, d0);
|
||||
|
||||
if (m1 > n1 || (m1 == n1 && m0 > n0)) {
|
||||
q0--;
|
||||
sub_ddmmss(m1, m0, m1, m0, d1, d0);
|
||||
}
|
||||
|
||||
q1 = 0;
|
||||
|
||||
/* Remainder in (n1n0 - m1m0) >> bm. */
|
||||
if (rp != 0) {
|
||||
sub_ddmmss(n1, n0, n1, n0, m1, m0);
|
||||
rr.s.low = (n1 << b) | (n0 >> bm);
|
||||
rr.s.high = n1 >> bm;
|
||||
*rp = rr.ll;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ww.s.low = q0;
|
||||
ww.s.high = q1;
|
||||
return ww.ll;
|
||||
}
|
||||
|
||||
u64 __udivdi3(u64 n, u64 d)
|
||||
{
|
||||
return __udivmoddi4(n, d, (u64 *) 0);
|
||||
}
|
||||
|
||||
u64 __umoddi3(u64 u, u64 v)
|
||||
{
|
||||
u64 w;
|
||||
|
||||
(void)__udivmoddi4(u, v, &w);
|
||||
|
||||
return w;
|
||||
}
|
|
@ -20,6 +20,7 @@
|
|||
#include <asm/irq.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/hardware/amba.h>
|
||||
#include <asm/hardware/arm_timer.h>
|
||||
#include <asm/arch/cm.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/leds.h>
|
||||
|
@ -156,16 +157,6 @@ EXPORT_SYMBOL(cm_control);
|
|||
#define TICKS2USECS(x) ((x) / TICKS_PER_uSEC)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* What does it look like?
|
||||
*/
|
||||
typedef struct TimerStruct {
|
||||
unsigned long TimerLoad;
|
||||
unsigned long TimerValue;
|
||||
unsigned long TimerControl;
|
||||
unsigned long TimerClear;
|
||||
} TimerStruct_t;
|
||||
|
||||
static unsigned long timer_reload;
|
||||
|
||||
/*
|
||||
|
@ -174,7 +165,6 @@ static unsigned long timer_reload;
|
|||
*/
|
||||
unsigned long integrator_gettimeoffset(void)
|
||||
{
|
||||
volatile TimerStruct_t *timer1 = (TimerStruct_t *)TIMER1_VA_BASE;
|
||||
unsigned long ticks1, ticks2, status;
|
||||
|
||||
/*
|
||||
|
@ -183,11 +173,11 @@ unsigned long integrator_gettimeoffset(void)
|
|||
* an interrupt. We get around this by ensuring that the
|
||||
* counter has not reloaded between our two reads.
|
||||
*/
|
||||
ticks2 = timer1->TimerValue & 0xffff;
|
||||
ticks2 = readl(TIMER1_VA_BASE + TIMER_VALUE) & 0xffff;
|
||||
do {
|
||||
ticks1 = ticks2;
|
||||
status = __raw_readl(VA_IC_BASE + IRQ_RAW_STATUS);
|
||||
ticks2 = timer1->TimerValue & 0xffff;
|
||||
ticks2 = readl(TIMER1_VA_BASE + TIMER_VALUE) & 0xffff;
|
||||
} while (ticks2 > ticks1);
|
||||
|
||||
/*
|
||||
|
@ -213,14 +203,12 @@ unsigned long integrator_gettimeoffset(void)
|
|||
static irqreturn_t
|
||||
integrator_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
volatile TimerStruct_t *timer1 = (volatile TimerStruct_t *)TIMER1_VA_BASE;
|
||||
|
||||
write_seqlock(&xtime_lock);
|
||||
|
||||
/*
|
||||
* clear the interrupt
|
||||
*/
|
||||
timer1->TimerClear = 1;
|
||||
writel(1, TIMER1_VA_BASE + TIMER_INTCLR);
|
||||
|
||||
/*
|
||||
* the clock tick routines are only processed on the
|
||||
|
@ -256,32 +244,29 @@ static struct irqaction integrator_timer_irq = {
|
|||
*/
|
||||
void __init integrator_time_init(unsigned long reload, unsigned int ctrl)
|
||||
{
|
||||
volatile TimerStruct_t *timer0 = (volatile TimerStruct_t *)TIMER0_VA_BASE;
|
||||
volatile TimerStruct_t *timer1 = (volatile TimerStruct_t *)TIMER1_VA_BASE;
|
||||
volatile TimerStruct_t *timer2 = (volatile TimerStruct_t *)TIMER2_VA_BASE;
|
||||
unsigned int timer_ctrl = 0x80 | 0x40; /* periodic */
|
||||
unsigned int timer_ctrl = TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC;
|
||||
|
||||
timer_reload = reload;
|
||||
timer_ctrl |= ctrl;
|
||||
|
||||
if (timer_reload > 0x100000) {
|
||||
timer_reload >>= 8;
|
||||
timer_ctrl |= 0x08; /* /256 */
|
||||
timer_ctrl |= TIMER_CTRL_DIV256;
|
||||
} else if (timer_reload > 0x010000) {
|
||||
timer_reload >>= 4;
|
||||
timer_ctrl |= 0x04; /* /16 */
|
||||
timer_ctrl |= TIMER_CTRL_DIV16;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialise to a known state (all timers off)
|
||||
*/
|
||||
timer0->TimerControl = 0;
|
||||
timer1->TimerControl = 0;
|
||||
timer2->TimerControl = 0;
|
||||
writel(0, TIMER0_VA_BASE + TIMER_CTRL);
|
||||
writel(0, TIMER1_VA_BASE + TIMER_CTRL);
|
||||
writel(0, TIMER2_VA_BASE + TIMER_CTRL);
|
||||
|
||||
timer1->TimerLoad = timer_reload;
|
||||
timer1->TimerValue = timer_reload;
|
||||
timer1->TimerControl = timer_ctrl;
|
||||
writel(timer_reload, TIMER1_VA_BASE + TIMER_LOAD);
|
||||
writel(timer_reload, TIMER1_VA_BASE + TIMER_VALUE);
|
||||
writel(timer_ctrl, TIMER1_VA_BASE + TIMER_CTRL);
|
||||
|
||||
/*
|
||||
* Make irqs happen for the system timer
|
||||
|
|
|
@ -41,7 +41,9 @@
|
|||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <asm/arch/omap16xx.h>
|
||||
#include <asm/arch/pm.h>
|
||||
#include <asm/arch/mux.h>
|
||||
|
@ -80,13 +82,13 @@ void omap_pm_idle(void)
|
|||
return;
|
||||
}
|
||||
mask32 = omap_readl(ARM_SYSST);
|
||||
local_fiq_enable();
|
||||
local_irq_enable();
|
||||
|
||||
#if defined(CONFIG_OMAP_32K_TIMER) && defined(CONFIG_NO_IDLE_HZ)
|
||||
/* Override timer to use VST for the next cycle */
|
||||
omap_32k_timer_next_vst_interrupt();
|
||||
#endif
|
||||
/*
|
||||
* Since an interrupt may set up a timer, we don't want to
|
||||
* reprogram the hardware timer with interrupts enabled.
|
||||
* Re-enable interrupts only after returning from idle.
|
||||
*/
|
||||
timer_dyn_reprogram();
|
||||
|
||||
if ((mask32 & DSP_IDLE) == 0) {
|
||||
__asm__ volatile ("mcr p15, 0, r0, c7, c0, 4");
|
||||
|
@ -102,6 +104,8 @@ void omap_pm_idle(void)
|
|||
|
||||
func_ptr();
|
||||
}
|
||||
local_fiq_enable();
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* OMAP Timers
|
||||
*
|
||||
* Copyright (C) 2004 Nokia Corporation
|
||||
* Partial timer rewrite and additional VST timer support by
|
||||
* Partial timer rewrite and additional dynamic tick timer support by
|
||||
* Tony Lindgen <tony@atomide.com> and
|
||||
* Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com>
|
||||
*
|
||||
|
@ -261,7 +261,6 @@ unsigned long long sched_clock(void)
|
|||
* so with HZ = 100, TVR = 327.68.
|
||||
*/
|
||||
#define OMAP_32K_TIMER_TICK_PERIOD ((32768 / HZ) - 1)
|
||||
#define MAX_SKIP_JIFFIES 25
|
||||
#define TIMER_32K_SYNCHRONIZED 0xfffbc410
|
||||
|
||||
#define JIFFIES_TO_HW_TICKS(nr_jiffies, clock_rate) \
|
||||
|
@ -347,6 +346,42 @@ static irqreturn_t omap_32k_timer_interrupt(int irq, void *dev_id,
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NO_IDLE_HZ
|
||||
/*
|
||||
* Programs the next timer interrupt needed. Called when dynamic tick is
|
||||
* enabled, and to reprogram the ticks to skip from pm_idle. Note that
|
||||
* we can keep the timer continuous, and don't need to set it to run in
|
||||
* one-shot mode. This is because the timer will get reprogrammed again
|
||||
* after next interrupt.
|
||||
*/
|
||||
void omap_32k_timer_reprogram(unsigned long next_tick)
|
||||
{
|
||||
omap_32k_timer_start(JIFFIES_TO_HW_TICKS(next_tick, 32768) + 1);
|
||||
}
|
||||
|
||||
static struct irqaction omap_32k_timer_irq;
|
||||
extern struct timer_update_handler timer_update;
|
||||
|
||||
static int omap_32k_timer_enable_dyn_tick(void)
|
||||
{
|
||||
/* No need to reprogram timer, just use the next interrupt */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap_32k_timer_disable_dyn_tick(void)
|
||||
{
|
||||
omap_32k_timer_start(OMAP_32K_TIMER_TICK_PERIOD);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dyn_tick_timer omap_dyn_tick_timer = {
|
||||
.enable = omap_32k_timer_enable_dyn_tick,
|
||||
.disable = omap_32k_timer_disable_dyn_tick,
|
||||
.reprogram = omap_32k_timer_reprogram,
|
||||
.handler = omap_32k_timer_interrupt,
|
||||
};
|
||||
#endif /* CONFIG_NO_IDLE_HZ */
|
||||
|
||||
static struct irqaction omap_32k_timer_irq = {
|
||||
.name = "32KHz timer",
|
||||
.flags = SA_INTERRUPT | SA_TIMER,
|
||||
|
@ -355,6 +390,11 @@ static struct irqaction omap_32k_timer_irq = {
|
|||
|
||||
static __init void omap_init_32k_timer(void)
|
||||
{
|
||||
|
||||
#ifdef CONFIG_NO_IDLE_HZ
|
||||
omap_timer.dyn_tick = &omap_dyn_tick_timer;
|
||||
#endif
|
||||
|
||||
setup_irq(INT_OS_TIMER, &omap_32k_timer_irq);
|
||||
omap_timer.offset = omap_32k_timer_gettimeoffset;
|
||||
omap_32k_last_tick = omap_32k_sync_timer_read();
|
||||
|
|
|
@ -154,6 +154,11 @@ config S3C2410_PM_CHECK_CHUNKSIZE
|
|||
the CRC data block will take more memory, but wil identify any
|
||||
faults with better precision.
|
||||
|
||||
config PM_SIMTEC
|
||||
bool
|
||||
depends on PM && (ARCH_BAST || MACH_VR1000)
|
||||
default y
|
||||
|
||||
config S3C2410_LOWLEVEL_UART_PORT
|
||||
int "S3C2410 UART to use for low-level messages"
|
||||
default 0
|
||||
|
|
|
@ -18,6 +18,7 @@ obj-$(CONFIG_S3C2410_DMA) += dma.o
|
|||
# Power Management support
|
||||
|
||||
obj-$(CONFIG_PM) += pm.o sleep.o
|
||||
obj-$(CONFIG_PM_SIMTEC) += pm-simtec.o
|
||||
|
||||
# S3C2440 support
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
* 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
|
||||
* 14-Mar-2006 BJD Updated for __iomem changes
|
||||
* 22-Jun-2006 BJD Added DM9000 platform information
|
||||
* 28-Jun-2006 BJD Moved pm functionality out to common code
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
@ -67,7 +68,6 @@
|
|||
#include "devs.h"
|
||||
#include "cpu.h"
|
||||
#include "usb-simtec.h"
|
||||
#include "pm.h"
|
||||
|
||||
#define COPYRIGHT ", (c) 2004-2005 Simtec Electronics"
|
||||
|
||||
|
@ -405,44 +405,13 @@ void __init bast_map_io(void)
|
|||
usb_simtec_init();
|
||||
}
|
||||
|
||||
void __init bast_init_irq(void)
|
||||
{
|
||||
s3c24xx_init_irq();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
/* bast_init_machine
|
||||
*
|
||||
* enable the power management functions for the EB2410ITX
|
||||
*/
|
||||
|
||||
static __init void bast_init_machine(void)
|
||||
{
|
||||
unsigned long gstatus4;
|
||||
|
||||
printk(KERN_INFO "BAST Power Manangement" COPYRIGHT "\n");
|
||||
|
||||
gstatus4 = (__raw_readl(S3C2410_BANKCON7) & 0x3) << 30;
|
||||
gstatus4 |= (__raw_readl(S3C2410_BANKCON6) & 0x3) << 28;
|
||||
gstatus4 |= (__raw_readl(S3C2410_BANKSIZE) & S3C2410_BANKSIZE_MASK);
|
||||
|
||||
__raw_writel(gstatus4, S3C2410_GSTATUS4);
|
||||
|
||||
s3c2410_pm_init();
|
||||
}
|
||||
|
||||
#else
|
||||
#define bast_init_machine NULL
|
||||
#endif
|
||||
|
||||
|
||||
MACHINE_START(BAST, "Simtec-BAST")
|
||||
MAINTAINER("Ben Dooks <ben@simtec.co.uk>")
|
||||
BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
|
||||
BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
|
||||
MAPIO(bast_map_io)
|
||||
INITIRQ(bast_init_irq)
|
||||
.init_machine = bast_init_machine,
|
||||
|
||||
.map_io = bast_map_io,
|
||||
.init_irq = s3c24xx_init_irq,
|
||||
.timer = &s3c24xx_timer,
|
||||
MACHINE_END
|
||||
|
|
|
@ -371,16 +371,12 @@ void __init vr1000_map_io(void)
|
|||
usb_simtec_init();
|
||||
}
|
||||
|
||||
void __init vr1000_init_irq(void)
|
||||
{
|
||||
s3c24xx_init_irq();
|
||||
}
|
||||
|
||||
MACHINE_START(VR1000, "Thorcom-VR1000")
|
||||
MAINTAINER("Ben Dooks <ben@simtec.co.uk>")
|
||||
BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
|
||||
BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
|
||||
MAPIO(vr1000_map_io)
|
||||
INITIRQ(vr1000_init_irq)
|
||||
.map_io = vr1000_map_io,
|
||||
.init_irq = s3c24xx_init_irq,
|
||||
.timer = &s3c24xx_timer,
|
||||
MACHINE_END
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
/* linux/arch/arm/mach-s3c2410/pm-simtec.c
|
||||
*
|
||||
* Copyright (c) 2004 Simtec Electronics
|
||||
* Ben Dooks <ben@simtec.co.uk>
|
||||
*
|
||||
* http://armlinux.simtec.co.uk/
|
||||
*
|
||||
* Power Management helpers for Simtec S3C24XX implementations
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
#include <asm/arch/map.h>
|
||||
#include <asm/arch/regs-serial.h>
|
||||
#include <asm/arch/regs-gpio.h>
|
||||
#include <asm/arch/regs-mem.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include "pm.h"
|
||||
|
||||
#define COPYRIGHT ", (c) 2005 Simtec Electronics"
|
||||
|
||||
/* pm_simtec_init
|
||||
*
|
||||
* enable the power management functions
|
||||
*/
|
||||
|
||||
static __init int pm_simtec_init(void)
|
||||
{
|
||||
unsigned long gstatus4;
|
||||
|
||||
/* check which machine we are running on */
|
||||
|
||||
if (!machine_is_bast() && !machine_is_vr1000())
|
||||
return 0;
|
||||
|
||||
printk(KERN_INFO "Simtec Board Power Manangement" COPYRIGHT "\n");
|
||||
|
||||
gstatus4 = (__raw_readl(S3C2410_BANKCON7) & 0x3) << 30;
|
||||
gstatus4 |= (__raw_readl(S3C2410_BANKCON6) & 0x3) << 28;
|
||||
gstatus4 |= (__raw_readl(S3C2410_BANKSIZE) & S3C2410_BANKSIZE_MASK);
|
||||
|
||||
__raw_writel(gstatus4, S3C2410_GSTATUS4);
|
||||
|
||||
return s3c2410_pm_init();
|
||||
}
|
||||
|
||||
arch_initcall(pm_simtec_init);
|
|
@ -33,6 +33,7 @@
|
|||
#include <asm/mach-types.h>
|
||||
#include <asm/hardware/amba.h>
|
||||
#include <asm/hardware/amba_clcd.h>
|
||||
#include <asm/hardware/arm_timer.h>
|
||||
#include <asm/hardware/icst307.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
|
@ -788,38 +789,25 @@ void __init versatile_init(void)
|
|||
*/
|
||||
#define TIMER_INTERVAL (TICKS_PER_uSEC * mSEC_10)
|
||||
#if TIMER_INTERVAL >= 0x100000
|
||||
#define TIMER_RELOAD (TIMER_INTERVAL >> 8) /* Divide by 256 */
|
||||
#define TIMER_CTRL 0x88 /* Enable, Clock / 256 */
|
||||
#define TIMER_RELOAD (TIMER_INTERVAL >> 8)
|
||||
#define TIMER_DIVISOR (TIMER_CTRL_DIV256)
|
||||
#define TICKS2USECS(x) (256 * (x) / TICKS_PER_uSEC)
|
||||
#elif TIMER_INTERVAL >= 0x10000
|
||||
#define TIMER_RELOAD (TIMER_INTERVAL >> 4) /* Divide by 16 */
|
||||
#define TIMER_CTRL 0x84 /* Enable, Clock / 16 */
|
||||
#define TIMER_DIVISOR (TIMER_CTRL_DIV16)
|
||||
#define TICKS2USECS(x) (16 * (x) / TICKS_PER_uSEC)
|
||||
#else
|
||||
#define TIMER_RELOAD (TIMER_INTERVAL)
|
||||
#define TIMER_CTRL 0x80 /* Enable */
|
||||
#define TIMER_DIVISOR (TIMER_CTRL_DIV1)
|
||||
#define TICKS2USECS(x) ((x) / TICKS_PER_uSEC)
|
||||
#endif
|
||||
|
||||
#define TIMER_CTRL_IE (1 << 5) /* Interrupt Enable */
|
||||
|
||||
/*
|
||||
* What does it look like?
|
||||
*/
|
||||
typedef struct TimerStruct {
|
||||
unsigned long TimerLoad;
|
||||
unsigned long TimerValue;
|
||||
unsigned long TimerControl;
|
||||
unsigned long TimerClear;
|
||||
} TimerStruct_t;
|
||||
|
||||
/*
|
||||
* Returns number of ms since last clock interrupt. Note that interrupts
|
||||
* will have been disabled by do_gettimeoffset()
|
||||
*/
|
||||
static unsigned long versatile_gettimeoffset(void)
|
||||
{
|
||||
volatile TimerStruct_t *timer0 = (TimerStruct_t *)TIMER0_VA_BASE;
|
||||
unsigned long ticks1, ticks2, status;
|
||||
|
||||
/*
|
||||
|
@ -828,11 +816,11 @@ static unsigned long versatile_gettimeoffset(void)
|
|||
* an interrupt. We get around this by ensuring that the
|
||||
* counter has not reloaded between our two reads.
|
||||
*/
|
||||
ticks2 = timer0->TimerValue & 0xffff;
|
||||
ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff;
|
||||
do {
|
||||
ticks1 = ticks2;
|
||||
status = __raw_readl(VA_IC_BASE + VIC_IRQ_RAW_STATUS);
|
||||
ticks2 = timer0->TimerValue & 0xffff;
|
||||
ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff;
|
||||
} while (ticks2 > ticks1);
|
||||
|
||||
/*
|
||||
|
@ -859,12 +847,10 @@ static unsigned long versatile_gettimeoffset(void)
|
|||
*/
|
||||
static irqreturn_t versatile_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
volatile TimerStruct_t *timer0 = (volatile TimerStruct_t *)TIMER0_VA_BASE;
|
||||
|
||||
write_seqlock(&xtime_lock);
|
||||
|
||||
// ...clear the interrupt
|
||||
timer0->TimerClear = 1;
|
||||
writel(1, TIMER0_VA_BASE + TIMER_INTCLR);
|
||||
|
||||
timer_tick(regs);
|
||||
|
||||
|
@ -884,31 +870,32 @@ static struct irqaction versatile_timer_irq = {
|
|||
*/
|
||||
static void __init versatile_timer_init(void)
|
||||
{
|
||||
volatile TimerStruct_t *timer0 = (volatile TimerStruct_t *)TIMER0_VA_BASE;
|
||||
volatile TimerStruct_t *timer1 = (volatile TimerStruct_t *)TIMER1_VA_BASE;
|
||||
volatile TimerStruct_t *timer2 = (volatile TimerStruct_t *)TIMER2_VA_BASE;
|
||||
volatile TimerStruct_t *timer3 = (volatile TimerStruct_t *)TIMER3_VA_BASE;
|
||||
u32 val;
|
||||
|
||||
/*
|
||||
* set clock frequency:
|
||||
* VERSATILE_REFCLK is 32KHz
|
||||
* VERSATILE_TIMCLK is 1MHz
|
||||
*/
|
||||
*(volatile unsigned int *)IO_ADDRESS(VERSATILE_SCTL_BASE) |=
|
||||
((VERSATILE_TIMCLK << VERSATILE_TIMER1_EnSel) | (VERSATILE_TIMCLK << VERSATILE_TIMER2_EnSel) |
|
||||
(VERSATILE_TIMCLK << VERSATILE_TIMER3_EnSel) | (VERSATILE_TIMCLK << VERSATILE_TIMER4_EnSel));
|
||||
val = readl(IO_ADDRESS(VERSATILE_SCTL_BASE));
|
||||
writel((VERSATILE_TIMCLK << VERSATILE_TIMER1_EnSel) |
|
||||
(VERSATILE_TIMCLK << VERSATILE_TIMER2_EnSel) |
|
||||
(VERSATILE_TIMCLK << VERSATILE_TIMER3_EnSel) |
|
||||
(VERSATILE_TIMCLK << VERSATILE_TIMER4_EnSel) | val,
|
||||
IO_ADDRESS(VERSATILE_SCTL_BASE));
|
||||
|
||||
/*
|
||||
* Initialise to a known state (all timers off)
|
||||
*/
|
||||
timer0->TimerControl = 0;
|
||||
timer1->TimerControl = 0;
|
||||
timer2->TimerControl = 0;
|
||||
timer3->TimerControl = 0;
|
||||
writel(0, TIMER0_VA_BASE + TIMER_CTRL);
|
||||
writel(0, TIMER1_VA_BASE + TIMER_CTRL);
|
||||
writel(0, TIMER2_VA_BASE + TIMER_CTRL);
|
||||
writel(0, TIMER3_VA_BASE + TIMER_CTRL);
|
||||
|
||||
timer0->TimerLoad = TIMER_RELOAD;
|
||||
timer0->TimerValue = TIMER_RELOAD;
|
||||
timer0->TimerControl = TIMER_CTRL | 0x40 | TIMER_CTRL_IE; /* periodic + IE */
|
||||
writel(TIMER_RELOAD, TIMER0_VA_BASE + TIMER_LOAD);
|
||||
writel(TIMER_RELOAD, TIMER0_VA_BASE + TIMER_VALUE);
|
||||
writel(TIMER_DIVISOR | TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC |
|
||||
TIMER_CTRL_IE, TIMER0_VA_BASE + TIMER_CTRL);
|
||||
|
||||
/*
|
||||
* Make irqs happen for the system timer
|
||||
|
|
|
@ -437,7 +437,7 @@ void __init paging_init(struct meminfo *mi, struct machine_desc *mdesc)
|
|||
memtable_init(mi);
|
||||
if (mdesc->map_io)
|
||||
mdesc->map_io();
|
||||
flush_tlb_all();
|
||||
local_flush_tlb_all();
|
||||
|
||||
/*
|
||||
* initialise the zones within each node
|
||||
|
|
|
@ -682,7 +682,7 @@ void __init memtable_init(struct meminfo *mi)
|
|||
}
|
||||
|
||||
flush_cache_all();
|
||||
flush_tlb_all();
|
||||
local_flush_tlb_all();
|
||||
|
||||
top_pmd = pmd_off_k(0xffff0000);
|
||||
}
|
||||
|
|
|
@ -117,7 +117,13 @@ static inline u64 vfp_estimate_div128to64(u64 nh, u64 nl, u64 m)
|
|||
if (nh >= m)
|
||||
return ~0ULL;
|
||||
mh = m >> 32;
|
||||
z = (mh << 32 <= nh) ? 0xffffffff00000000ULL : (nh / mh) << 32;
|
||||
if (mh << 32 <= nh) {
|
||||
z = 0xffffffff00000000ULL;
|
||||
} else {
|
||||
z = nh;
|
||||
do_div(z, mh);
|
||||
z <<= 32;
|
||||
}
|
||||
mul64to128(&termh, &terml, m, z);
|
||||
sub128(&remh, &reml, nh, nl, termh, terml);
|
||||
ml = m << 32;
|
||||
|
@ -126,7 +132,12 @@ static inline u64 vfp_estimate_div128to64(u64 nh, u64 nl, u64 m)
|
|||
add128(&remh, &reml, remh, reml, mh, ml);
|
||||
}
|
||||
remh = (remh << 32) | (reml >> 32);
|
||||
z |= (mh << 32 <= remh) ? 0xffffffff : remh / mh;
|
||||
if (mh << 32 <= remh) {
|
||||
z |= 0xffffffff;
|
||||
} else {
|
||||
do_div(remh, mh);
|
||||
z |= remh;
|
||||
}
|
||||
return z;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <asm/div64.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/vfp.h>
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ void vfp_raise_sigfpe(unsigned int sicode, struct pt_regs *regs)
|
|||
current->thread.error_code = 0;
|
||||
current->thread.trap_no = 6;
|
||||
|
||||
force_sig_info(SIGFPE, &info, current);
|
||||
send_sig_info(SIGFPE, &info, current);
|
||||
}
|
||||
|
||||
static void vfp_panic(char *reason)
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <asm/div64.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/vfp.h>
|
||||
|
||||
|
@ -303,7 +305,11 @@ u32 vfp_estimate_sqrt_significand(u32 exponent, u32 significand)
|
|||
if (z <= a)
|
||||
return (s32)a >> 1;
|
||||
}
|
||||
return (u32)(((u64)a << 31) / z) + (z >> 1);
|
||||
{
|
||||
u64 v = (u64)a << 31;
|
||||
do_div(v, z);
|
||||
return v + (z >> 1);
|
||||
}
|
||||
}
|
||||
|
||||
static u32 vfp_single_fsqrt(int sd, int unused, s32 m, u32 fpscr)
|
||||
|
@ -1107,7 +1113,11 @@ static u32 vfp_single_fdiv(int sd, int sn, s32 m, u32 fpscr)
|
|||
vsn.significand >>= 1;
|
||||
vsd.exponent++;
|
||||
}
|
||||
vsd.significand = ((u64)vsn.significand << 32) / vsm.significand;
|
||||
{
|
||||
u64 significand = (u64)vsn.significand << 32;
|
||||
do_div(significand, vsm.significand);
|
||||
vsd.significand = significand;
|
||||
}
|
||||
if ((vsd.significand & 0x3f) == 0)
|
||||
vsd.significand |= ((u64)vsm.significand * vsd.significand != (u64)vsn.significand << 32);
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ CONFIG_ACPI_DEALLOCATE_IRQ=y
|
|||
# Firmware Drivers
|
||||
#
|
||||
CONFIG_EFI_VARS=y
|
||||
# CONFIG_EFI_PCDP is not set
|
||||
CONFIG_EFI_PCDP=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
|
||||
|
@ -650,7 +650,7 @@ CONFIG_MMTIMER=y
|
|||
#
|
||||
# Console display driver support
|
||||
#
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_VGA_CONSOLE=y
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
|
||||
#
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-20050621
|
||||
# Tue Jun 21 14:03:24 2005
|
||||
# Linux kernel version: 2.6.13-rc1-20050629
|
||||
# Wed Jun 29 15:28:12 2005
|
||||
#
|
||||
|
||||
#
|
||||
|
@ -80,18 +80,29 @@ CONFIG_MCKINLEY=y
|
|||
# CONFIG_IA64_PAGE_SIZE_8KB is not set
|
||||
CONFIG_IA64_PAGE_SIZE_16KB=y
|
||||
# CONFIG_IA64_PAGE_SIZE_64KB is not set
|
||||
# CONFIG_HZ_100 is not set
|
||||
CONFIG_HZ_250=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
CONFIG_HZ=250
|
||||
CONFIG_IA64_L1_CACHE_SHIFT=7
|
||||
# CONFIG_NUMA is not set
|
||||
CONFIG_VIRTUAL_MEM_MAP=y
|
||||
CONFIG_HOLES_IN_ZONE=y
|
||||
CONFIG_IA64_CYCLONE=y
|
||||
CONFIG_IOSAPIC=y
|
||||
# CONFIG_IA64_SGI_SN_XP is not set
|
||||
CONFIG_FORCE_MAX_ZONEORDER=18
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_IA32_SUPPORT=y
|
||||
CONFIG_COMPAT=y
|
||||
|
@ -257,6 +268,7 @@ CONFIG_BLK_DEV_CMD64X=y
|
|||
# CONFIG_BLK_DEV_HPT366 is not set
|
||||
# CONFIG_BLK_DEV_SC1200 is not set
|
||||
CONFIG_BLK_DEV_PIIX=y
|
||||
# CONFIG_BLK_DEV_IT821X is not set
|
||||
# CONFIG_BLK_DEV_NS87415 is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
|
||||
|
@ -395,6 +407,7 @@ CONFIG_UNIX=y
|
|||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_FIB_HASH=y
|
||||
# CONFIG_IP_PNP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
|
@ -407,6 +420,8 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_IP_TCPDIAG=y
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
|
@ -598,9 +613,7 @@ CONFIG_GAMEPORT=m
|
|||
# CONFIG_GAMEPORT_NS558 is not set
|
||||
# CONFIG_GAMEPORT_L4 is not set
|
||||
# CONFIG_GAMEPORT_EMU10K1 is not set
|
||||
# CONFIG_GAMEPORT_VORTEX is not set
|
||||
# CONFIG_GAMEPORT_FM801 is not set
|
||||
# CONFIG_GAMEPORT_CS461X is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
@ -629,7 +642,6 @@ CONFIG_SERIAL_8250_NR_UARTS=6
|
|||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
|
||||
# CONFIG_SERIAL_8250_MULTIPORT is not set
|
||||
# CONFIG_SERIAL_8250_RSA is not set
|
||||
|
||||
#
|
||||
|
@ -743,6 +755,7 @@ CONFIG_USB_DEVICEFS=y
|
|||
CONFIG_USB_EHCI_HCD=m
|
||||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=m
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
|
@ -779,9 +792,11 @@ CONFIG_USB_HIDINPUT=y
|
|||
# CONFIG_USB_HIDDEV is not set
|
||||
# CONFIG_USB_AIPTEK is not set
|
||||
# CONFIG_USB_WACOM is not set
|
||||
# CONFIG_USB_ACECAD is not set
|
||||
# CONFIG_USB_KBTAB is not set
|
||||
# CONFIG_USB_POWERMATE is not set
|
||||
# CONFIG_USB_MTOUCH is not set
|
||||
# CONFIG_USB_ITMTOUCH is not set
|
||||
# CONFIG_USB_EGALAX is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
|
@ -838,7 +853,7 @@ CONFIG_USB_HIDINPUT=y
|
|||
# CONFIG_USB_TEST is not set
|
||||
|
||||
#
|
||||
# USB ATM/DSL drivers
|
||||
# USB DSL modem support
|
||||
#
|
||||
|
||||
#
|
||||
|
@ -856,6 +871,10 @@ CONFIG_USB_HIDINPUT=y
|
|||
#
|
||||
# CONFIG_INFINIBAND is not set
|
||||
|
||||
#
|
||||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -863,6 +882,7 @@ CONFIG_EXT2_FS=y
|
|||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_EXT3_FS_XATTR=y
|
||||
CONFIG_EXT3_FS_POSIX_ACL=y
|
||||
|
@ -922,7 +942,6 @@ CONFIG_NTFS_FS=m
|
|||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_DEVFS_FS is not set
|
||||
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
|
@ -953,15 +972,18 @@ CONFIG_RAMFS=y
|
|||
#
|
||||
CONFIG_NFS_FS=m
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_NFS_DIRECTIO=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V3_ACL is not set
|
||||
CONFIG_NFSD_V4=y
|
||||
CONFIG_NFSD_TCP=y
|
||||
CONFIG_LOCKD=m
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=m
|
||||
CONFIG_SUNRPC_GSS=m
|
||||
CONFIG_RPCSEC_GSS_KRB5=m
|
||||
|
@ -1069,6 +1091,7 @@ CONFIG_LOG_BUF_SHIFT=20
|
|||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_KPROBES is not set
|
||||
CONFIG_IA64_GRANULE_16MB=y
|
||||
# CONFIG_IA64_GRANULE_64MB is not set
|
||||
# CONFIG_IA64_PRINT_HAZARDS is not set
|
||||
|
@ -1090,7 +1113,7 @@ CONFIG_CRYPTO=y
|
|||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_NULL is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_CRYPTO_MD5=m
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
# CONFIG_CRYPTO_SHA1 is not set
|
||||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.10
|
||||
# Wed Dec 29 09:05:48 2004
|
||||
# Linux kernel version: 2.6.13-rc1-20050629
|
||||
# Wed Jun 29 15:31:11 2005
|
||||
#
|
||||
|
||||
#
|
||||
|
@ -12,6 +12,7 @@ CONFIG_EXPERIMENTAL=y
|
|||
CONFIG_BROKEN=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -24,23 +25,26 @@ CONFIG_BSD_PROCESS_ACCT=y
|
|||
# CONFIG_BSD_PROCESS_ACCT_V3 is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_CPUSETS is not set
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -59,12 +63,15 @@ CONFIG_IA64=y
|
|||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_TIME_INTERPOLATION=y
|
||||
CONFIG_EFI=y
|
||||
CONFIG_GENERIC_IOMAP=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
# CONFIG_IA64_GENERIC is not set
|
||||
# CONFIG_IA64_DIG is not set
|
||||
CONFIG_IA64_HP_ZX1=y
|
||||
# CONFIG_IA64_HP_ZX1_SWIOTLB is not set
|
||||
# CONFIG_IA64_SGI_SN2 is not set
|
||||
# CONFIG_IA64_HP_SIM is not set
|
||||
# CONFIG_ITANIUM is not set
|
||||
|
@ -73,22 +80,36 @@ CONFIG_MCKINLEY=y
|
|||
# CONFIG_IA64_PAGE_SIZE_8KB is not set
|
||||
CONFIG_IA64_PAGE_SIZE_16KB=y
|
||||
# CONFIG_IA64_PAGE_SIZE_64KB is not set
|
||||
# CONFIG_HZ_100 is not set
|
||||
CONFIG_HZ_250=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
CONFIG_HZ=250
|
||||
CONFIG_IA64_L1_CACHE_SHIFT=7
|
||||
# CONFIG_NUMA is not set
|
||||
CONFIG_VIRTUAL_MEM_MAP=y
|
||||
CONFIG_HOLES_IN_ZONE=y
|
||||
# CONFIG_IA64_CYCLONE is not set
|
||||
CONFIG_IOSAPIC=y
|
||||
# CONFIG_IA64_SGI_SN_XP is not set
|
||||
CONFIG_FORCE_MAX_ZONEORDER=18
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=16
|
||||
# CONFIG_HOTPLUG_CPU is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_IA32_SUPPORT=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_IA64_MCA_RECOVERY=y
|
||||
CONFIG_PERFMON=y
|
||||
CONFIG_IA64_PALINFO=y
|
||||
CONFIG_ACPI_DEALLOCATE_IRQ=y
|
||||
|
||||
#
|
||||
# Firmware Drivers
|
||||
|
@ -120,6 +141,7 @@ CONFIG_ACPI_BUS=y
|
|||
CONFIG_ACPI_POWER=y
|
||||
CONFIG_ACPI_PCI=y
|
||||
CONFIG_ACPI_SYSTEM=y
|
||||
# CONFIG_ACPI_CONTAINER is not set
|
||||
|
||||
#
|
||||
# Bus options (PCI, PCMCIA)
|
||||
|
@ -129,6 +151,7 @@ CONFIG_PCI_DOMAINS=y
|
|||
# CONFIG_PCI_MSI is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
# PCI Hotplug Support
|
||||
|
@ -138,7 +161,6 @@ CONFIG_HOTPLUG_PCI=y
|
|||
CONFIG_HOTPLUG_PCI_ACPI=y
|
||||
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
|
||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||
# CONFIG_HOTPLUG_PCI_PCIE is not set
|
||||
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
||||
|
||||
#
|
||||
|
@ -146,10 +168,6 @@ CONFIG_HOTPLUG_PCI_ACPI=y
|
|||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
# PC-card bridges
|
||||
#
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
@ -184,6 +202,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||
# CONFIG_BLK_CPQ_CISS_DA is not set
|
||||
# CONFIG_BLK_DEV_DAC960 is not set
|
||||
# CONFIG_BLK_DEV_UMEM is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
|
@ -203,6 +222,7 @@ CONFIG_IOSCHED_NOOP=y
|
|||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
|
@ -246,6 +266,7 @@ CONFIG_BLK_DEV_CMD64X=y
|
|||
# CONFIG_BLK_DEV_HPT366 is not set
|
||||
# CONFIG_BLK_DEV_SC1200 is not set
|
||||
# CONFIG_BLK_DEV_PIIX is not set
|
||||
# CONFIG_BLK_DEV_IT821X is not set
|
||||
# CONFIG_BLK_DEV_NS87415 is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
|
||||
|
@ -275,6 +296,7 @@ CONFIG_CHR_DEV_OSST=y
|
|||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
# CONFIG_CHR_DEV_SCH is not set
|
||||
|
||||
#
|
||||
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
|
||||
|
@ -288,6 +310,7 @@ CONFIG_SCSI_LOGGING=y
|
|||
#
|
||||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
# CONFIG_SCSI_FC_ATTRS is not set
|
||||
# CONFIG_SCSI_ISCSI_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
|
@ -303,13 +326,10 @@ CONFIG_SCSI_SPI_ATTRS=y
|
|||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_CPQFCTS is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_EATA_PIO is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
# CONFIG_SCSI_INITIO is not set
|
||||
# CONFIG_SCSI_INIA100 is not set
|
||||
|
@ -319,8 +339,6 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
|
|||
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
||||
# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
|
||||
# CONFIG_SCSI_IPR is not set
|
||||
# CONFIG_SCSI_PCI2000 is not set
|
||||
# CONFIG_SCSI_PCI2220I is not set
|
||||
# CONFIG_SCSI_QLOGIC_ISP is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
CONFIG_SCSI_QLOGIC_1280=y
|
||||
|
@ -331,7 +349,7 @@ CONFIG_SCSI_QLA2XXX=y
|
|||
# CONFIG_SCSI_QLA2300 is not set
|
||||
# CONFIG_SCSI_QLA2322 is not set
|
||||
# CONFIG_SCSI_QLA6312 is not set
|
||||
# CONFIG_SCSI_QLA6322 is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
@ -344,9 +362,9 @@ CONFIG_SCSI_QLA2XXX=y
|
|||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
CONFIG_FUSION=y
|
||||
CONFIG_FUSION_MAX_SGE=40
|
||||
# CONFIG_FUSION_CTL is not set
|
||||
# CONFIG_FUSION is not set
|
||||
# CONFIG_FUSION_SPI is not set
|
||||
# CONFIG_FUSION_FC is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
|
@ -368,12 +386,12 @@ CONFIG_NET=y
|
|||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_FIB_HASH=y
|
||||
# CONFIG_IP_PNP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
|
@ -386,6 +404,8 @@ CONFIG_IP_MULTICAST=y
|
|||
# CONFIG_INET_TUNNEL is not set
|
||||
# CONFIG_IP_TCPDIAG is not set
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
|
||||
#
|
||||
# IP: Virtual Server Configuration
|
||||
|
@ -405,8 +425,6 @@ CONFIG_NETFILTER=y
|
|||
CONFIG_IP_NF_ARPTABLES=y
|
||||
# CONFIG_IP_NF_ARPFILTER is not set
|
||||
# CONFIG_IP_NF_ARP_MANGLE is not set
|
||||
# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
|
||||
# CONFIG_IP_NF_COMPAT_IPFWADM is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
|
@ -483,7 +501,6 @@ CONFIG_NET_PCI=y
|
|||
# CONFIG_DGRS is not set
|
||||
# CONFIG_EEPRO100 is not set
|
||||
CONFIG_E100=y
|
||||
# CONFIG_E100_NAPI is not set
|
||||
# CONFIG_FEALNX is not set
|
||||
# CONFIG_NATSEMI is not set
|
||||
# CONFIG_NE2K_PCI is not set
|
||||
|
@ -505,9 +522,11 @@ CONFIG_E1000=y
|
|||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_TIGON3=y
|
||||
# CONFIG_BNX2 is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
|
@ -564,18 +583,6 @@ CONFIG_INPUT_JOYDEV=y
|
|||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_SERIO_I8042 is not set
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_CT82C710 is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
|
@ -585,6 +592,16 @@ CONFIG_SERIO=y
|
|||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_SERIO_I8042 is not set
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
|
@ -603,7 +620,6 @@ CONFIG_SERIAL_8250_NR_UARTS=8
|
|||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
|
||||
# CONFIG_SERIAL_8250_MULTIPORT is not set
|
||||
# CONFIG_SERIAL_8250_RSA is not set
|
||||
|
||||
#
|
||||
|
@ -611,6 +627,7 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
|
|||
#
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
|
@ -644,6 +661,12 @@ CONFIG_DRM_RADEON=y
|
|||
# CONFIG_DRM_SIS is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_HPET is not set
|
||||
# CONFIG_HANGCHECK_TIMER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -668,6 +691,7 @@ CONFIG_I2C_ALGOPCF=y
|
|||
# CONFIG_I2C_AMD8111 is not set
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
|
@ -691,10 +715,14 @@ CONFIG_I2C_ALGOPCF=y
|
|||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
# CONFIG_SENSORS_ADM1031 is not set
|
||||
# CONFIG_SENSORS_ADM9240 is not set
|
||||
# CONFIG_SENSORS_ASB100 is not set
|
||||
# CONFIG_SENSORS_ATXP1 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_FSCHER is not set
|
||||
# CONFIG_SENSORS_FSCPOS is not set
|
||||
# CONFIG_SENSORS_GL518SM is not set
|
||||
# CONFIG_SENSORS_GL520SM is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
# CONFIG_SENSORS_LM63 is not set
|
||||
# CONFIG_SENSORS_LM75 is not set
|
||||
|
@ -705,21 +733,29 @@ CONFIG_I2C_ALGOPCF=y
|
|||
# CONFIG_SENSORS_LM85 is not set
|
||||
# CONFIG_SENSORS_LM87 is not set
|
||||
# CONFIG_SENSORS_LM90 is not set
|
||||
# CONFIG_SENSORS_LM92 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_VIA686A is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
# CONFIG_SENSORS_W83627EHF is not set
|
||||
|
||||
#
|
||||
# Other I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_DS1374 is not set
|
||||
# CONFIG_SENSORS_EEPROM is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_RTC8564 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
|
@ -746,6 +782,7 @@ CONFIG_VIDEO_DEV=y
|
|||
#
|
||||
# Video Adapters
|
||||
#
|
||||
# CONFIG_TUNER_MULTI_I2C is not set
|
||||
# CONFIG_VIDEO_BT848 is not set
|
||||
# CONFIG_VIDEO_CPIA is not set
|
||||
# CONFIG_VIDEO_SAA5246A is not set
|
||||
|
@ -778,6 +815,11 @@ CONFIG_VIDEO_DEV=y
|
|||
# Graphics support
|
||||
#
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
|
@ -785,6 +827,7 @@ CONFIG_FB_MODE_HELPERS=y
|
|||
# CONFIG_FB_CYBER2000 is not set
|
||||
# CONFIG_FB_ASILIANT is not set
|
||||
# CONFIG_FB_IMSTT is not set
|
||||
# CONFIG_FB_NVIDIA is not set
|
||||
# CONFIG_FB_RIVA is not set
|
||||
# CONFIG_FB_MATROX is not set
|
||||
# CONFIG_FB_RADEON_OLD is not set
|
||||
|
@ -801,6 +844,7 @@ CONFIG_FB_RADEON_DEBUG=y
|
|||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_PM3 is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
|
@ -820,6 +864,7 @@ CONFIG_LOGO=y
|
|||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_LOGO_LINUX_CLUT224=y
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
|
@ -869,6 +914,8 @@ CONFIG_SND_AC97_CODEC=y
|
|||
# CONFIG_SND_CS46XX is not set
|
||||
# CONFIG_SND_CS4281 is not set
|
||||
# CONFIG_SND_EMU10K1 is not set
|
||||
# CONFIG_SND_EMU10K1X is not set
|
||||
# CONFIG_SND_CA0106 is not set
|
||||
# CONFIG_SND_KORG1212 is not set
|
||||
# CONFIG_SND_MIXART is not set
|
||||
# CONFIG_SND_NM256 is not set
|
||||
|
@ -876,6 +923,7 @@ CONFIG_SND_AC97_CODEC=y
|
|||
# CONFIG_SND_RME96 is not set
|
||||
# CONFIG_SND_RME9652 is not set
|
||||
# CONFIG_SND_HDSP is not set
|
||||
# CONFIG_SND_HDSPM is not set
|
||||
# CONFIG_SND_TRIDENT is not set
|
||||
# CONFIG_SND_YMFPCI is not set
|
||||
# CONFIG_SND_ALS4000 is not set
|
||||
|
@ -893,13 +941,14 @@ CONFIG_SND_FM801_TEA575X=y
|
|||
# CONFIG_SND_INTEL8X0M is not set
|
||||
# CONFIG_SND_SONICVIBES is not set
|
||||
# CONFIG_SND_VIA82XX is not set
|
||||
# CONFIG_SND_VIA82XX_MODEM is not set
|
||||
# CONFIG_SND_VX222 is not set
|
||||
# CONFIG_SND_HDA_INTEL is not set
|
||||
|
||||
#
|
||||
# USB devices
|
||||
#
|
||||
# CONFIG_SND_USB_AUDIO is not set
|
||||
# CONFIG_SND_USB_USX2Y is not set
|
||||
|
||||
#
|
||||
# Open Sound System
|
||||
|
@ -909,6 +958,8 @@ CONFIG_SND_FM801_TEA575X=y
|
|||
#
|
||||
# USB support
|
||||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
|
||||
|
@ -920,8 +971,6 @@ CONFIG_USB_BANDWIDTH=y
|
|||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
# CONFIG_USB_SUSPEND is not set
|
||||
# CONFIG_USB_OTG is not set
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
|
||||
#
|
||||
# USB Host Controller Drivers
|
||||
|
@ -929,7 +978,10 @@ CONFIG_USB_ARCH_HAS_OHCI=y
|
|||
CONFIG_USB_EHCI_HCD=y
|
||||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
CONFIG_USB_UHCI_HCD=y
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
|
||||
|
@ -947,12 +999,11 @@ CONFIG_USB_UHCI_HCD=y
|
|||
#
|
||||
CONFIG_USB_STORAGE=y
|
||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
||||
# CONFIG_USB_STORAGE_RW_DETECT is not set
|
||||
# CONFIG_USB_STORAGE_DATAFAB is not set
|
||||
# CONFIG_USB_STORAGE_FREECOM is not set
|
||||
# CONFIG_USB_STORAGE_ISD200 is not set
|
||||
# CONFIG_USB_STORAGE_DPCM is not set
|
||||
# CONFIG_USB_STORAGE_HP8200e is not set
|
||||
# CONFIG_USB_STORAGE_USBAT is not set
|
||||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
||||
|
@ -966,9 +1017,11 @@ CONFIG_USB_HIDINPUT=y
|
|||
CONFIG_USB_HIDDEV=y
|
||||
# CONFIG_USB_AIPTEK is not set
|
||||
# CONFIG_USB_WACOM is not set
|
||||
# CONFIG_USB_ACECAD is not set
|
||||
# CONFIG_USB_KBTAB is not set
|
||||
# CONFIG_USB_POWERMATE is not set
|
||||
# CONFIG_USB_MTOUCH is not set
|
||||
# CONFIG_USB_ITMTOUCH is not set
|
||||
# CONFIG_USB_EGALAX is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
|
@ -978,7 +1031,6 @@ CONFIG_USB_HIDDEV=y
|
|||
#
|
||||
# CONFIG_USB_MDC800 is not set
|
||||
# CONFIG_USB_MICROTEK is not set
|
||||
# CONFIG_USB_HPUSBSCSI is not set
|
||||
|
||||
#
|
||||
# USB Multimedia devices
|
||||
|
@ -992,6 +1044,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_SE401 is not set
|
||||
# CONFIG_USB_SN9C102 is not set
|
||||
# CONFIG_USB_STV680 is not set
|
||||
# CONFIG_USB_PWC is not set
|
||||
|
||||
#
|
||||
# USB Network Adapters
|
||||
|
@ -1001,6 +1054,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_PEGASUS is not set
|
||||
# CONFIG_USB_RTL8150 is not set
|
||||
# CONFIG_USB_USBNET is not set
|
||||
CONFIG_USB_MON=y
|
||||
|
||||
#
|
||||
# USB port drivers
|
||||
|
@ -1016,7 +1070,6 @@ CONFIG_USB_HIDDEV=y
|
|||
#
|
||||
# CONFIG_USB_EMI62 is not set
|
||||
# CONFIG_USB_EMI26 is not set
|
||||
# CONFIG_USB_TIGL is not set
|
||||
# CONFIG_USB_AUERSWALD is not set
|
||||
# CONFIG_USB_RIO500 is not set
|
||||
# CONFIG_USB_LEGOTOWER is not set
|
||||
|
@ -1025,9 +1078,11 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_CYTHERM is not set
|
||||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
|
||||
#
|
||||
# USB ATM/DSL drivers
|
||||
# USB DSL modem support
|
||||
#
|
||||
|
||||
#
|
||||
|
@ -1040,6 +1095,15 @@ CONFIG_USB_HIDDEV=y
|
|||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
# CONFIG_INFINIBAND is not set
|
||||
|
||||
#
|
||||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -1047,6 +1111,7 @@ CONFIG_EXT2_FS=y
|
|||
CONFIG_EXT2_FS_XATTR=y
|
||||
# CONFIG_EXT2_FS_POSIX_ACL is not set
|
||||
# CONFIG_EXT2_FS_SECURITY is not set
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_EXT3_FS_XATTR=y
|
||||
# CONFIG_EXT3_FS_POSIX_ACL is not set
|
||||
|
@ -1056,6 +1121,10 @@ CONFIG_JBD=y
|
|||
CONFIG_FS_MBCACHE=y
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
|
@ -1089,7 +1158,6 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
|||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_DEVFS_FS is not set
|
||||
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
|
@ -1120,15 +1188,18 @@ CONFIG_RAMFS=y
|
|||
#
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
CONFIG_NFS_V4=y
|
||||
# CONFIG_NFS_DIRECTIO is not set
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V3_ACL is not set
|
||||
# CONFIG_NFSD_V4 is not set
|
||||
# CONFIG_NFSD_TCP is not set
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
CONFIG_SUNRPC_GSS=y
|
||||
CONFIG_RPCSEC_GSS_KRB5=y
|
||||
|
@ -1209,6 +1280,8 @@ CONFIG_NLS_UTF8=y
|
|||
# CONFIG_CRC_CCITT is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
||||
#
|
||||
# Profiling support
|
||||
|
@ -1218,14 +1291,18 @@ CONFIG_CRC32=y
|
|||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_IA64_GRANULE_16MB=y
|
||||
# CONFIG_IA64_GRANULE_64MB is not set
|
||||
CONFIG_IA64_PRINT_HAZARDS=y
|
||||
|
@ -1252,6 +1329,7 @@ CONFIG_CRYPTO_MD5=y
|
|||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
# CONFIG_CRYPTO_WP512 is not set
|
||||
# CONFIG_CRYPTO_TGR192 is not set
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
|
|
|
@ -156,10 +156,13 @@
|
|||
*/
|
||||
#define DELAYED_RESOURCE_CNT 64
|
||||
|
||||
#define PCI_DEVICE_ID_HP_SX2000_IOC 0x12ec
|
||||
|
||||
#define ZX1_IOC_ID ((PCI_DEVICE_ID_HP_ZX1_IOC << 16) | PCI_VENDOR_ID_HP)
|
||||
#define ZX2_IOC_ID ((PCI_DEVICE_ID_HP_ZX2_IOC << 16) | PCI_VENDOR_ID_HP)
|
||||
#define REO_IOC_ID ((PCI_DEVICE_ID_HP_REO_IOC << 16) | PCI_VENDOR_ID_HP)
|
||||
#define SX1000_IOC_ID ((PCI_DEVICE_ID_HP_SX1000_IOC << 16) | PCI_VENDOR_ID_HP)
|
||||
#define SX2000_IOC_ID ((PCI_DEVICE_ID_HP_SX2000_IOC << 16) | PCI_VENDOR_ID_HP)
|
||||
|
||||
#define ZX1_IOC_OFFSET 0x1000 /* ACPI reports SBA, we want IOC */
|
||||
|
||||
|
@ -1726,6 +1729,7 @@ static struct ioc_iommu ioc_iommu_info[] __initdata = {
|
|||
{ ZX1_IOC_ID, "zx1", ioc_zx1_init },
|
||||
{ ZX2_IOC_ID, "zx2", NULL },
|
||||
{ SX1000_IOC_ID, "sx1000", NULL },
|
||||
{ SX2000_IOC_ID, "sx2000", NULL },
|
||||
};
|
||||
|
||||
static struct ioc * __init
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/serialP.h>
|
||||
#include <linux/sysrq.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/hw_irq.h>
|
||||
|
@ -149,12 +150,17 @@ static void receive_chars(struct tty_struct *tty, struct pt_regs *regs)
|
|||
seen_esc = 2;
|
||||
continue;
|
||||
} else if ( seen_esc == 2 ) {
|
||||
if ( ch == 'P' ) show_state(); /* F1 key */
|
||||
#ifdef CONFIG_KDB
|
||||
if ( ch == 'S' )
|
||||
kdb(KDB_REASON_KEYBOARD, 0, (kdb_eframe_t) regs);
|
||||
if ( ch == 'P' ) /* F1 */
|
||||
show_state();
|
||||
#ifdef CONFIG_MAGIC_SYSRQ
|
||||
if ( ch == 'S' ) { /* F4 */
|
||||
do
|
||||
ch = ia64_ssc(0, 0, 0, 0,
|
||||
SSC_GETCHAR);
|
||||
while (!ch);
|
||||
handle_sysrq(ch, regs, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
seen_esc = 0;
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -470,18 +470,6 @@ ENTRY(load_switch_stack)
|
|||
br.cond.sptk.many b7
|
||||
END(load_switch_stack)
|
||||
|
||||
GLOBAL_ENTRY(__ia64_syscall)
|
||||
.regstk 6,0,0,0
|
||||
mov r15=in5 // put syscall number in place
|
||||
break __BREAK_SYSCALL
|
||||
movl r2=errno
|
||||
cmp.eq p6,p7=-1,r10
|
||||
;;
|
||||
(p6) st4 [r2]=r8
|
||||
(p6) mov r8=-1
|
||||
br.ret.sptk.many rp
|
||||
END(__ia64_syscall)
|
||||
|
||||
GLOBAL_ENTRY(execve)
|
||||
mov r15=__NR_execve // put syscall number in place
|
||||
break __BREAK_SYSCALL
|
||||
|
@ -637,7 +625,7 @@ END(ia64_ret_from_syscall)
|
|||
* r8-r11: restored (syscall return value(s))
|
||||
* r12: restored (user-level stack pointer)
|
||||
* r13: restored (user-level thread pointer)
|
||||
* r14: cleared
|
||||
* r14: set to __kernel_syscall_via_epc
|
||||
* r15: restored (syscall #)
|
||||
* r16-r17: cleared
|
||||
* r18: user-level b6
|
||||
|
@ -658,7 +646,7 @@ END(ia64_ret_from_syscall)
|
|||
* pr: restored (user-level pr)
|
||||
* b0: restored (user-level rp)
|
||||
* b6: restored
|
||||
* b7: cleared
|
||||
* b7: set to __kernel_syscall_via_epc
|
||||
* ar.unat: restored (user-level ar.unat)
|
||||
* ar.pfs: restored (user-level ar.pfs)
|
||||
* ar.rsc: restored (user-level ar.rsc)
|
||||
|
@ -704,72 +692,79 @@ ENTRY(ia64_leave_syscall)
|
|||
;;
|
||||
(p6) ld4 r31=[r18] // load current_thread_info()->flags
|
||||
ld8 r19=[r2],PT(B6)-PT(LOADRS) // load ar.rsc value for "loadrs"
|
||||
mov b7=r0 // clear b7
|
||||
nop.i 0
|
||||
;;
|
||||
ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE) // load ar.bspstore (may be garbage)
|
||||
mov r16=ar.bsp // M2 get existing backing store pointer
|
||||
ld8 r18=[r2],PT(R9)-PT(B6) // load b6
|
||||
(p6) and r15=TIF_WORK_MASK,r31 // any work other than TIF_SYSCALL_TRACE?
|
||||
;;
|
||||
mov r16=ar.bsp // M2 get existing backing store pointer
|
||||
ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE) // load ar.bspstore (may be garbage)
|
||||
(p6) cmp4.ne.unc p6,p0=r15, r0 // any special work pending?
|
||||
(p6) br.cond.spnt .work_pending_syscall
|
||||
;;
|
||||
// start restoring the state saved on the kernel stack (struct pt_regs):
|
||||
ld8 r9=[r2],PT(CR_IPSR)-PT(R9)
|
||||
ld8 r11=[r3],PT(CR_IIP)-PT(R11)
|
||||
mov f6=f0 // clear f6
|
||||
(pNonSys) break 0 // bug check: we shouldn't be here if pNonSys is TRUE!
|
||||
;;
|
||||
invala // M0|1 invalidate ALAT
|
||||
rsm psr.i | psr.ic // M2 initiate turning off of interrupt and interruption collection
|
||||
mov f9=f0 // clear f9
|
||||
rsm psr.i | psr.ic // M2 turn off interrupts and interruption collection
|
||||
cmp.eq p9,p0=r0,r0 // A set p9 to indicate that we should restore cr.ifs
|
||||
|
||||
ld8 r29=[r2],16 // load cr.ipsr
|
||||
ld8 r28=[r3],16 // load cr.iip
|
||||
mov f8=f0 // clear f8
|
||||
ld8 r29=[r2],16 // M0|1 load cr.ipsr
|
||||
ld8 r28=[r3],16 // M0|1 load cr.iip
|
||||
mov r22=r0 // A clear r22
|
||||
;;
|
||||
ld8 r30=[r2],16 // M0|1 load cr.ifs
|
||||
ld8 r25=[r3],16 // M0|1 load ar.unat
|
||||
cmp.eq p9,p0=r0,r0 // set p9 to indicate that we should restore cr.ifs
|
||||
(pUStk) add r14=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
|
||||
;;
|
||||
ld8 r26=[r2],PT(B0)-PT(AR_PFS) // M0|1 load ar.pfs
|
||||
(pKStk) mov r22=psr // M2 read PSR now that interrupts are disabled
|
||||
mov f10=f0 // clear f10
|
||||
nop 0
|
||||
;;
|
||||
ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // load b0
|
||||
ld8 r27=[r3],PT(PR)-PT(AR_RSC) // load ar.rsc
|
||||
mov f11=f0 // clear f11
|
||||
ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // M0|1 load b0
|
||||
ld8 r27=[r3],PT(PR)-PT(AR_RSC) // M0|1 load ar.rsc
|
||||
mov f6=f0 // F clear f6
|
||||
;;
|
||||
ld8 r24=[r2],PT(AR_FPSR)-PT(AR_RNAT) // load ar.rnat (may be garbage)
|
||||
ld8 r31=[r3],PT(R1)-PT(PR) // load predicates
|
||||
(pUStk) add r14=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
|
||||
ld8 r24=[r2],PT(AR_FPSR)-PT(AR_RNAT) // M0|1 load ar.rnat (may be garbage)
|
||||
ld8 r31=[r3],PT(R1)-PT(PR) // M0|1 load predicates
|
||||
mov f7=f0 // F clear f7
|
||||
;;
|
||||
ld8 r20=[r2],PT(R12)-PT(AR_FPSR) // load ar.fpsr
|
||||
ld8.fill r1=[r3],16 // load r1
|
||||
(pUStk) mov r17=1
|
||||
ld8 r20=[r2],PT(R12)-PT(AR_FPSR) // M0|1 load ar.fpsr
|
||||
ld8.fill r1=[r3],16 // M0|1 load r1
|
||||
(pUStk) mov r17=1 // A
|
||||
;;
|
||||
srlz.d // M0 ensure interruption collection is off
|
||||
ld8.fill r13=[r3],16
|
||||
mov f7=f0 // clear f7
|
||||
(pUStk) st1 [r14]=r17 // M2|3
|
||||
ld8.fill r13=[r3],16 // M0|1
|
||||
mov f8=f0 // F clear f8
|
||||
;;
|
||||
ld8.fill r12=[r2] // restore r12 (sp)
|
||||
mov.m ar.ssd=r0 // M2 clear ar.ssd
|
||||
mov r22=r0 // clear r22
|
||||
|
||||
ld8.fill r15=[r3] // restore r15
|
||||
(pUStk) st1 [r14]=r17
|
||||
addl r3=THIS_CPU(ia64_phys_stacked_size_p8),r0
|
||||
;;
|
||||
(pUStk) ld4 r17=[r3] // r17 = cpu_data->phys_stacked_size_p8
|
||||
mov.m ar.csd=r0 // M2 clear ar.csd
|
||||
ld8.fill r12=[r2] // M0|1 restore r12 (sp)
|
||||
ld8.fill r15=[r3] // M0|1 restore r15
|
||||
mov b6=r18 // I0 restore b6
|
||||
;;
|
||||
mov r14=r0 // clear r14
|
||||
shr.u r18=r19,16 // I0|1 get byte size of existing "dirty" partition
|
||||
(pKStk) br.cond.dpnt.many skip_rbs_switch
|
||||
|
||||
mov.m ar.ccv=r0 // clear ar.ccv
|
||||
(pNonSys) br.cond.dpnt.many dont_preserve_current_frame
|
||||
br.cond.sptk.many rbs_switch
|
||||
addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0 // A
|
||||
mov f9=f0 // F clear f9
|
||||
(pKStk) br.cond.dpnt.many skip_rbs_switch // B
|
||||
|
||||
srlz.d // M0 ensure interruption collection is off (for cover)
|
||||
shr.u r18=r19,16 // I0|1 get byte size of existing "dirty" partition
|
||||
cover // B add current frame into dirty partition & set cr.ifs
|
||||
;;
|
||||
(pUStk) ld4 r17=[r17] // M0|1 r17 = cpu_data->phys_stacked_size_p8
|
||||
mov r19=ar.bsp // M2 get new backing store pointer
|
||||
mov f10=f0 // F clear f10
|
||||
|
||||
nop.m 0
|
||||
movl r14=__kernel_syscall_via_epc // X
|
||||
;;
|
||||
mov.m ar.csd=r0 // M2 clear ar.csd
|
||||
mov.m ar.ccv=r0 // M2 clear ar.ccv
|
||||
mov b7=r14 // I0 clear b7 (hint with __kernel_syscall_via_epc)
|
||||
|
||||
mov.m ar.ssd=r0 // M2 clear ar.ssd
|
||||
mov f11=f0 // F clear f11
|
||||
br.cond.sptk.many rbs_switch // B
|
||||
END(ia64_leave_syscall)
|
||||
|
||||
#ifdef CONFIG_IA32_SUPPORT
|
||||
|
@ -885,7 +880,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
|
|||
ldf.fill f7=[r2],PT(F11)-PT(F7)
|
||||
ldf.fill f8=[r3],32
|
||||
;;
|
||||
srlz.i // ensure interruption collection is off
|
||||
srlz.d // ensure that inter. collection is off (VHPT is don't care, since text is pinned)
|
||||
mov ar.ccv=r15
|
||||
;;
|
||||
ldf.fill f11=[r2]
|
||||
|
@ -945,11 +940,10 @@ GLOBAL_ENTRY(ia64_leave_kernel)
|
|||
* NOTE: alloc, loadrs, and cover can't be predicated.
|
||||
*/
|
||||
(pNonSys) br.cond.dpnt dont_preserve_current_frame
|
||||
|
||||
rbs_switch:
|
||||
cover // add current frame into dirty partition and set cr.ifs
|
||||
;;
|
||||
mov r19=ar.bsp // get new backing store pointer
|
||||
rbs_switch:
|
||||
sub r16=r16,r18 // krbs = old bsp - size of dirty partition
|
||||
cmp.ne p9,p0=r0,r0 // clear p9 to skip restore of cr.ifs
|
||||
;;
|
||||
|
@ -1024,14 +1018,14 @@ rse_clear_invalid:
|
|||
mov loc5=0
|
||||
mov loc6=0
|
||||
mov loc7=0
|
||||
(pRecurse) br.call.sptk.few b0=rse_clear_invalid
|
||||
(pRecurse) br.call.dptk.few b0=rse_clear_invalid
|
||||
;;
|
||||
mov loc8=0
|
||||
mov loc9=0
|
||||
cmp.ne pReturn,p0=r0,in1 // if recursion count != 0, we need to do a br.ret
|
||||
mov loc10=0
|
||||
mov loc11=0
|
||||
(pReturn) br.ret.sptk.many b0
|
||||
(pReturn) br.ret.dptk.many b0
|
||||
#endif /* !CONFIG_ITANIUM */
|
||||
# undef pRecurse
|
||||
# undef pReturn
|
||||
|
|
|
@ -531,93 +531,114 @@ GLOBAL_ENTRY(fsys_bubble_down)
|
|||
.altrp b6
|
||||
.body
|
||||
/*
|
||||
* We get here for syscalls that don't have a lightweight handler. For those, we
|
||||
* need to bubble down into the kernel and that requires setting up a minimal
|
||||
* pt_regs structure, and initializing the CPU state more or less as if an
|
||||
* interruption had occurred. To make syscall-restarts work, we setup pt_regs
|
||||
* such that cr_iip points to the second instruction in syscall_via_break.
|
||||
* Decrementing the IP hence will restart the syscall via break and not
|
||||
* decrementing IP will return us to the caller, as usual. Note that we preserve
|
||||
* the value of psr.pp rather than initializing it from dcr.pp. This makes it
|
||||
* possible to distinguish fsyscall execution from other privileged execution.
|
||||
* We get here for syscalls that don't have a lightweight
|
||||
* handler. For those, we need to bubble down into the kernel
|
||||
* and that requires setting up a minimal pt_regs structure,
|
||||
* and initializing the CPU state more or less as if an
|
||||
* interruption had occurred. To make syscall-restarts work,
|
||||
* we setup pt_regs such that cr_iip points to the second
|
||||
* instruction in syscall_via_break. Decrementing the IP
|
||||
* hence will restart the syscall via break and not
|
||||
* decrementing IP will return us to the caller, as usual.
|
||||
* Note that we preserve the value of psr.pp rather than
|
||||
* initializing it from dcr.pp. This makes it possible to
|
||||
* distinguish fsyscall execution from other privileged
|
||||
* execution.
|
||||
*
|
||||
* On entry:
|
||||
* - normal fsyscall handler register usage, except that we also have:
|
||||
* - normal fsyscall handler register usage, except
|
||||
* that we also have:
|
||||
* - r18: address of syscall entry point
|
||||
* - r21: ar.fpsr
|
||||
* - r26: ar.pfs
|
||||
* - r27: ar.rsc
|
||||
* - r29: psr
|
||||
*
|
||||
* We used to clear some PSR bits here but that requires slow
|
||||
* serialization. Fortuntely, that isn't really necessary.
|
||||
* The rationale is as follows: we used to clear bits
|
||||
* ~PSR_PRESERVED_BITS in PSR.L. Since
|
||||
* PSR_PRESERVED_BITS==PSR.{UP,MFL,MFH,PK,DT,PP,SP,RT,IC}, we
|
||||
* ended up clearing PSR.{BE,AC,I,DFL,DFH,DI,DB,SI,TB}.
|
||||
* However,
|
||||
*
|
||||
* PSR.BE : already is turned off in __kernel_syscall_via_epc()
|
||||
* PSR.AC : don't care (kernel normally turns PSR.AC on)
|
||||
* PSR.I : already turned off by the time fsys_bubble_down gets
|
||||
* invoked
|
||||
* PSR.DFL: always 0 (kernel never turns it on)
|
||||
* PSR.DFH: don't care --- kernel never touches f32-f127 on its own
|
||||
* initiative
|
||||
* PSR.DI : always 0 (kernel never turns it on)
|
||||
* PSR.SI : always 0 (kernel never turns it on)
|
||||
* PSR.DB : don't care --- kernel never enables kernel-level
|
||||
* breakpoints
|
||||
* PSR.TB : must be 0 already; if it wasn't zero on entry to
|
||||
* __kernel_syscall_via_epc, the branch to fsys_bubble_down
|
||||
* will trigger a taken branch; the taken-trap-handler then
|
||||
* converts the syscall into a break-based system-call.
|
||||
*/
|
||||
# define PSR_PRESERVED_BITS (IA64_PSR_UP | IA64_PSR_MFL | IA64_PSR_MFH | IA64_PSR_PK \
|
||||
| IA64_PSR_DT | IA64_PSR_PP | IA64_PSR_SP | IA64_PSR_RT \
|
||||
| IA64_PSR_IC)
|
||||
/*
|
||||
* Reading psr.l gives us only bits 0-31, psr.it, and psr.mc. The rest we have
|
||||
* to synthesize.
|
||||
* Reading psr.l gives us only bits 0-31, psr.it, and psr.mc.
|
||||
* The rest we have to synthesize.
|
||||
*/
|
||||
# define PSR_ONE_BITS ((3 << IA64_PSR_CPL0_BIT) | (0x1 << IA64_PSR_RI_BIT) \
|
||||
# define PSR_ONE_BITS ((3 << IA64_PSR_CPL0_BIT) \
|
||||
| (0x1 << IA64_PSR_RI_BIT) \
|
||||
| IA64_PSR_BN | IA64_PSR_I)
|
||||
|
||||
invala
|
||||
movl r8=PSR_ONE_BITS
|
||||
invala // M0|1
|
||||
movl r14=ia64_ret_from_syscall // X
|
||||
|
||||
mov r25=ar.unat // save ar.unat (5 cyc)
|
||||
movl r9=PSR_PRESERVED_BITS
|
||||
nop.m 0
|
||||
movl r28=__kernel_syscall_via_break // X create cr.iip
|
||||
;;
|
||||
|
||||
mov ar.rsc=0 // set enforced lazy mode, pl 0, little-endian, loadrs=0
|
||||
movl r28=__kernel_syscall_via_break
|
||||
mov r2=r16 // A get task addr to addl-addressable register
|
||||
adds r16=IA64_TASK_THREAD_ON_USTACK_OFFSET,r16 // A
|
||||
mov r31=pr // I0 save pr (2 cyc)
|
||||
;;
|
||||
mov r23=ar.bspstore // save ar.bspstore (12 cyc)
|
||||
mov r31=pr // save pr (2 cyc)
|
||||
mov r20=r1 // save caller's gp in r20
|
||||
st1 [r16]=r0 // M2|3 clear current->thread.on_ustack flag
|
||||
addl r22=IA64_RBS_OFFSET,r2 // A compute base of RBS
|
||||
add r3=TI_FLAGS+IA64_TASK_SIZE,r2 // A
|
||||
;;
|
||||
mov r2=r16 // copy current task addr to addl-addressable register
|
||||
and r9=r9,r29
|
||||
mov r19=b6 // save b6 (2 cyc)
|
||||
ld4 r3=[r3] // M0|1 r3 = current_thread_info()->flags
|
||||
lfetch.fault.excl.nt1 [r22] // M0|1 prefetch register backing-store
|
||||
nop.i 0
|
||||
;;
|
||||
mov psr.l=r9 // slam the door (17 cyc to srlz.i)
|
||||
or r29=r8,r29 // construct cr.ipsr value to save
|
||||
addl r22=IA64_RBS_OFFSET,r2 // compute base of RBS
|
||||
mov ar.rsc=0 // M2 set enforced lazy mode, pl 0, LE, loadrs=0
|
||||
nop.m 0
|
||||
nop.i 0
|
||||
;;
|
||||
// GAS reports a spurious RAW hazard on the read of ar.rnat because it thinks
|
||||
// we may be reading ar.itc after writing to psr.l. Avoid that message with
|
||||
// this directive:
|
||||
dv_serialize_data
|
||||
mov.m r24=ar.rnat // read ar.rnat (5 cyc lat)
|
||||
lfetch.fault.excl.nt1 [r22]
|
||||
adds r16=IA64_TASK_THREAD_ON_USTACK_OFFSET,r2
|
||||
mov r23=ar.bspstore // M2 (12 cyc) save ar.bspstore
|
||||
mov.m r24=ar.rnat // M2 (5 cyc) read ar.rnat (dual-issues!)
|
||||
nop.i 0
|
||||
;;
|
||||
mov ar.bspstore=r22 // M2 (6 cyc) switch to kernel RBS
|
||||
movl r8=PSR_ONE_BITS // X
|
||||
;;
|
||||
mov r25=ar.unat // M2 (5 cyc) save ar.unat
|
||||
mov r19=b6 // I0 save b6 (2 cyc)
|
||||
mov r20=r1 // A save caller's gp in r20
|
||||
;;
|
||||
or r29=r8,r29 // A construct cr.ipsr value to save
|
||||
mov b6=r18 // I0 copy syscall entry-point to b6 (7 cyc)
|
||||
addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2 // A compute base of memory stack
|
||||
|
||||
// ensure previous insn group is issued before we stall for srlz.i:
|
||||
mov r18=ar.bsp // M2 save (kernel) ar.bsp (12 cyc)
|
||||
cmp.ne pKStk,pUStk=r0,r0 // A set pKStk <- 0, pUStk <- 1
|
||||
br.call.sptk.many b7=ia64_syscall_setup // B
|
||||
;;
|
||||
srlz.i // ensure new psr.l has been established
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
////////// from this point on, execution is not interruptible anymore
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2 // compute base of memory stack
|
||||
cmp.ne pKStk,pUStk=r0,r0 // set pKStk <- 0, pUStk <- 1
|
||||
mov ar.rsc=0x3 // M2 set eager mode, pl 0, LE, loadrs=0
|
||||
mov rp=r14 // I0 set the real return addr
|
||||
and r3=_TIF_SYSCALL_TRACEAUDIT,r3 // A
|
||||
;;
|
||||
st1 [r16]=r0 // clear current->thread.on_ustack flag
|
||||
mov ar.bspstore=r22 // switch to kernel RBS
|
||||
mov b6=r18 // copy syscall entry-point to b6 (7 cyc)
|
||||
add r3=TI_FLAGS+IA64_TASK_SIZE,r2
|
||||
;;
|
||||
ld4 r3=[r3] // r2 = current_thread_info()->flags
|
||||
mov r18=ar.bsp // save (kernel) ar.bsp (12 cyc)
|
||||
mov ar.rsc=0x3 // set eager mode, pl 0, little-endian, loadrs=0
|
||||
br.call.sptk.many b7=ia64_syscall_setup
|
||||
;;
|
||||
ssm psr.i
|
||||
movl r2=ia64_ret_from_syscall
|
||||
;;
|
||||
mov rp=r2 // set the real return addr
|
||||
and r3=_TIF_SYSCALL_TRACEAUDIT,r3
|
||||
;;
|
||||
cmp.eq p8,p0=r3,r0
|
||||
ssm psr.i // M2 we're on kernel stacks now, reenable irqs
|
||||
cmp.eq p8,p0=r3,r0 // A
|
||||
(p10) br.cond.spnt.many ia64_ret_from_syscall // B return if bad call-frame or r15 is a NaT
|
||||
|
||||
(p10) br.cond.spnt.many ia64_ret_from_syscall // p10==true means out registers are more than 8
|
||||
(p8) br.call.sptk.many b6=b6 // ignore this return addr
|
||||
br.cond.sptk ia64_trace_syscall
|
||||
nop.m 0
|
||||
(p8) br.call.sptk.many b6=b6 // B (ignore return address)
|
||||
br.cond.spnt ia64_trace_syscall // B
|
||||
END(fsys_bubble_down)
|
||||
|
||||
.rodata
|
||||
|
|
|
@ -72,38 +72,40 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc)
|
|||
* bundle get executed. The remaining code must be safe even if
|
||||
* they do not get executed.
|
||||
*/
|
||||
adds r17=-1024,r15
|
||||
mov r10=0 // default to successful syscall execution
|
||||
epc
|
||||
adds r17=-1024,r15 // A
|
||||
mov r10=0 // A default to successful syscall execution
|
||||
epc // B causes split-issue
|
||||
}
|
||||
;;
|
||||
rsm psr.be // note: on McKinley "rsm psr.be/srlz.d" is slightly faster than "rum psr.be"
|
||||
LOAD_FSYSCALL_TABLE(r14)
|
||||
rsm psr.be | psr.i // M2 (5 cyc to srlz.d)
|
||||
LOAD_FSYSCALL_TABLE(r14) // X
|
||||
;;
|
||||
mov r16=IA64_KR(CURRENT) // M2 (12 cyc)
|
||||
shladd r18=r17,3,r14 // A
|
||||
mov r19=NR_syscalls-1 // A
|
||||
;;
|
||||
lfetch [r18] // M0|1
|
||||
mov r29=psr // M2 (12 cyc)
|
||||
// If r17 is a NaT, p6 will be zero
|
||||
cmp.geu p6,p7=r19,r17 // A (sysnr > 0 && sysnr < 1024+NR_syscalls)?
|
||||
;;
|
||||
mov r21=ar.fpsr // M2 (12 cyc)
|
||||
tnat.nz p10,p9=r15 // I0
|
||||
mov.i r26=ar.pfs // I0 (would stall anyhow due to srlz.d...)
|
||||
;;
|
||||
srlz.d // M0 (forces split-issue) ensure PSR.BE==0
|
||||
(p6) ld8 r18=[r18] // M0|1
|
||||
nop.i 0
|
||||
;;
|
||||
nop.m 0
|
||||
(p6) tbit.z.unc p8,p0=r18,0 // I0 (dual-issues with "mov b7=r18"!)
|
||||
nop.i 0
|
||||
;;
|
||||
(p8) ssm psr.i
|
||||
(p6) mov b7=r18 // I0
|
||||
(p8) br.dptk.many b7 // B
|
||||
|
||||
mov r16=IA64_KR(CURRENT) // 12 cycle read latency
|
||||
tnat.nz p10,p9=r15
|
||||
mov r19=NR_syscalls-1
|
||||
;;
|
||||
shladd r18=r17,3,r14
|
||||
|
||||
srlz.d
|
||||
cmp.ne p8,p0=r0,r0 // p8 <- FALSE
|
||||
/* Note: if r17 is a NaT, p6 will be set to zero. */
|
||||
cmp.geu p6,p7=r19,r17 // (syscall > 0 && syscall < 1024+NR_syscalls)?
|
||||
;;
|
||||
(p6) ld8 r18=[r18]
|
||||
mov r21=ar.fpsr
|
||||
add r14=-8,r14 // r14 <- addr of fsys_bubble_down entry
|
||||
;;
|
||||
(p6) mov b7=r18
|
||||
(p6) tbit.z p8,p0=r18,0
|
||||
(p8) br.dptk.many b7
|
||||
|
||||
(p6) rsm psr.i
|
||||
mov r27=ar.rsc
|
||||
mov r26=ar.pfs
|
||||
;;
|
||||
mov r29=psr // read psr (12 cyc load latency)
|
||||
mov r27=ar.rsc // M2 (12 cyc)
|
||||
/*
|
||||
* brl.cond doesn't work as intended because the linker would convert this branch
|
||||
* into a branch to a PLT. Perhaps there will be a way to avoid this with some
|
||||
|
@ -111,6 +113,8 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc)
|
|||
* instead.
|
||||
*/
|
||||
#ifdef CONFIG_ITANIUM
|
||||
(p6) add r14=-8,r14 // r14 <- addr of fsys_bubble_down entry
|
||||
;;
|
||||
(p6) ld8 r14=[r14] // r14 <- fsys_bubble_down
|
||||
;;
|
||||
(p6) mov b7=r14
|
||||
|
@ -118,7 +122,7 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc)
|
|||
#else
|
||||
BRL_COND_FSYS_BUBBLE_DOWN(p6)
|
||||
#endif
|
||||
|
||||
ssm psr.i
|
||||
mov r10=-1
|
||||
(p10) mov r8=EINVAL
|
||||
(p9) mov r8=ENOSYS
|
||||
|
|
|
@ -58,9 +58,6 @@ EXPORT_SYMBOL(__strlen_user);
|
|||
EXPORT_SYMBOL(__strncpy_from_user);
|
||||
EXPORT_SYMBOL(__strnlen_user);
|
||||
|
||||
#include <asm/unistd.h>
|
||||
EXPORT_SYMBOL(__ia64_syscall);
|
||||
|
||||
/* from arch/ia64/lib */
|
||||
extern void __divsi3(void);
|
||||
extern void __udivsi3(void);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* arch/ia64/kernel/ivt.S
|
||||
*
|
||||
* Copyright (C) 1998-2001, 2003 Hewlett-Packard Co
|
||||
* Copyright (C) 1998-2001, 2003, 2005 Hewlett-Packard Co
|
||||
* Stephane Eranian <eranian@hpl.hp.com>
|
||||
* David Mosberger <davidm@hpl.hp.com>
|
||||
* Copyright (C) 2000, 2002-2003 Intel Co
|
||||
|
@ -692,82 +692,118 @@ ENTRY(break_fault)
|
|||
* to prevent leaking bits from kernel to user level.
|
||||
*/
|
||||
DBG_FAULT(11)
|
||||
mov r16=IA64_KR(CURRENT) // r16 = current task; 12 cycle read lat.
|
||||
mov r17=cr.iim
|
||||
mov r18=__IA64_BREAK_SYSCALL
|
||||
mov r21=ar.fpsr
|
||||
mov r29=cr.ipsr
|
||||
mov r19=b6
|
||||
mov r25=ar.unat
|
||||
mov r27=ar.rsc
|
||||
mov r26=ar.pfs
|
||||
mov r28=cr.iip
|
||||
mov r31=pr // prepare to save predicates
|
||||
mov r20=r1
|
||||
mov.m r16=IA64_KR(CURRENT) // M2 r16 <- current task (12 cyc)
|
||||
mov r29=cr.ipsr // M2 (12 cyc)
|
||||
mov r31=pr // I0 (2 cyc)
|
||||
|
||||
mov r17=cr.iim // M2 (2 cyc)
|
||||
mov.m r27=ar.rsc // M2 (12 cyc)
|
||||
mov r18=__IA64_BREAK_SYSCALL // A
|
||||
|
||||
mov.m ar.rsc=0 // M2
|
||||
mov.m r21=ar.fpsr // M2 (12 cyc)
|
||||
mov r19=b6 // I0 (2 cyc)
|
||||
;;
|
||||
mov.m r23=ar.bspstore // M2 (12 cyc)
|
||||
mov.m r24=ar.rnat // M2 (5 cyc)
|
||||
mov.i r26=ar.pfs // I0 (2 cyc)
|
||||
|
||||
invala // M0|1
|
||||
nop.m 0 // M
|
||||
mov r20=r1 // A save r1
|
||||
|
||||
nop.m 0
|
||||
movl r30=sys_call_table // X
|
||||
|
||||
mov r28=cr.iip // M2 (2 cyc)
|
||||
cmp.eq p0,p7=r18,r17 // I0 is this a system call?
|
||||
(p7) br.cond.spnt non_syscall // B no ->
|
||||
//
|
||||
// From this point on, we are definitely on the syscall-path
|
||||
// and we can use (non-banked) scratch registers.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
mov r1=r16 // A move task-pointer to "addl"-addressable reg
|
||||
mov r2=r16 // A setup r2 for ia64_syscall_setup
|
||||
add r9=TI_FLAGS+IA64_TASK_SIZE,r16 // A r9 = ¤t_thread_info()->flags
|
||||
|
||||
adds r16=IA64_TASK_THREAD_ON_USTACK_OFFSET,r16
|
||||
cmp.eq p0,p7=r18,r17 // is this a system call? (p7 <- false, if so)
|
||||
(p7) br.cond.spnt non_syscall
|
||||
;;
|
||||
ld1 r17=[r16] // load current->thread.on_ustack flag
|
||||
st1 [r16]=r0 // clear current->thread.on_ustack flag
|
||||
add r1=-IA64_TASK_THREAD_ON_USTACK_OFFSET,r16 // set r1 for MINSTATE_START_SAVE_MIN_VIRT
|
||||
;;
|
||||
invala
|
||||
|
||||
/* adjust return address so we skip over the break instruction: */
|
||||
|
||||
extr.u r8=r29,41,2 // extract ei field from cr.ipsr
|
||||
;;
|
||||
cmp.eq p6,p7=2,r8 // isr.ei==2?
|
||||
mov r2=r1 // setup r2 for ia64_syscall_setup
|
||||
;;
|
||||
(p6) mov r8=0 // clear ei to 0
|
||||
(p6) adds r28=16,r28 // switch cr.iip to next bundle cr.ipsr.ei wrapped
|
||||
(p7) adds r8=1,r8 // increment ei to next slot
|
||||
;;
|
||||
cmp.eq pKStk,pUStk=r0,r17 // are we in kernel mode already?
|
||||
dep r29=r8,r29,41,2 // insert new ei into cr.ipsr
|
||||
;;
|
||||
|
||||
// switch from user to kernel RBS:
|
||||
MINSTATE_START_SAVE_MIN_VIRT
|
||||
br.call.sptk.many b7=ia64_syscall_setup
|
||||
;;
|
||||
MINSTATE_END_SAVE_MIN_VIRT // switch to bank 1
|
||||
ssm psr.ic | PSR_DEFAULT_BITS
|
||||
;;
|
||||
srlz.i // guarantee that interruption collection is on
|
||||
adds r15=-1024,r15 // A subtract 1024 from syscall number
|
||||
mov r3=NR_syscalls - 1
|
||||
;;
|
||||
(p15) ssm psr.i // restore psr.i
|
||||
// p10==true means out registers are more than 8 or r15's Nat is true
|
||||
(p10) br.cond.spnt.many ia64_ret_from_syscall
|
||||
;;
|
||||
movl r16=sys_call_table
|
||||
ld1.bias r17=[r16] // M0|1 r17 = current->thread.on_ustack flag
|
||||
ld4 r9=[r9] // M0|1 r9 = current_thread_info()->flags
|
||||
extr.u r8=r29,41,2 // I0 extract ei field from cr.ipsr
|
||||
|
||||
adds r15=-1024,r15 // r15 contains the syscall number---subtract 1024
|
||||
movl r2=ia64_ret_from_syscall
|
||||
shladd r30=r15,3,r30 // A r30 = sys_call_table + 8*(syscall-1024)
|
||||
addl r22=IA64_RBS_OFFSET,r1 // A compute base of RBS
|
||||
cmp.leu p6,p7=r15,r3 // A syscall number in range?
|
||||
;;
|
||||
shladd r20=r15,3,r16 // r20 = sys_call_table + 8*(syscall-1024)
|
||||
cmp.leu p6,p7=r15,r3 // (syscall > 0 && syscall < 1024 + NR_syscalls) ?
|
||||
mov rp=r2 // set the real return addr
|
||||
;;
|
||||
(p6) ld8 r20=[r20] // load address of syscall entry point
|
||||
(p7) movl r20=sys_ni_syscall
|
||||
|
||||
add r2=TI_FLAGS+IA64_TASK_SIZE,r13
|
||||
lfetch.fault.excl.nt1 [r22] // M0|1 prefetch RBS
|
||||
(p6) ld8 r30=[r30] // M0|1 load address of syscall entry point
|
||||
tnat.nz.or p7,p0=r15 // I0 is syscall nr a NaT?
|
||||
|
||||
mov.m ar.bspstore=r22 // M2 switch to kernel RBS
|
||||
cmp.eq p8,p9=2,r8 // A isr.ei==2?
|
||||
;;
|
||||
ld4 r2=[r2] // r2 = current_thread_info()->flags
|
||||
|
||||
(p8) mov r8=0 // A clear ei to 0
|
||||
(p7) movl r30=sys_ni_syscall // X
|
||||
|
||||
(p8) adds r28=16,r28 // A switch cr.iip to next bundle
|
||||
(p9) adds r8=1,r8 // A increment ei to next slot
|
||||
nop.i 0
|
||||
;;
|
||||
and r2=_TIF_SYSCALL_TRACEAUDIT,r2 // mask trace or audit
|
||||
|
||||
mov.m r25=ar.unat // M2 (5 cyc)
|
||||
dep r29=r8,r29,41,2 // I0 insert new ei into cr.ipsr
|
||||
adds r15=1024,r15 // A restore original syscall number
|
||||
//
|
||||
// If any of the above loads miss in L1D, we'll stall here until
|
||||
// the data arrives.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
st1 [r16]=r0 // M2|3 clear current->thread.on_ustack flag
|
||||
mov b6=r30 // I0 setup syscall handler branch reg early
|
||||
cmp.eq pKStk,pUStk=r0,r17 // A were we on kernel stacks already?
|
||||
|
||||
and r9=_TIF_SYSCALL_TRACEAUDIT,r9 // A mask trace or audit
|
||||
mov r18=ar.bsp // M2 (12 cyc)
|
||||
(pKStk) br.cond.spnt .break_fixup // B we're already in kernel-mode -- fix up RBS
|
||||
;;
|
||||
cmp.eq p8,p0=r2,r0
|
||||
mov b6=r20
|
||||
.back_from_break_fixup:
|
||||
(pUStk) addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r1 // A compute base of memory stack
|
||||
cmp.eq p14,p0=r9,r0 // A are syscalls being traced/audited?
|
||||
br.call.sptk.many b7=ia64_syscall_setup // B
|
||||
1:
|
||||
mov ar.rsc=0x3 // M2 set eager mode, pl 0, LE, loadrs=0
|
||||
nop 0
|
||||
bsw.1 // B (6 cyc) regs are saved, switch to bank 1
|
||||
;;
|
||||
(p8) br.call.sptk.many b6=b6 // ignore this return addr
|
||||
br.cond.sptk ia64_trace_syscall
|
||||
|
||||
ssm psr.ic | PSR_DEFAULT_BITS // M2 now it's safe to re-enable intr.-collection
|
||||
movl r3=ia64_ret_from_syscall // X
|
||||
;;
|
||||
|
||||
srlz.i // M0 ensure interruption collection is on
|
||||
mov rp=r3 // I0 set the real return addr
|
||||
(p10) br.cond.spnt.many ia64_ret_from_syscall // B return if bad call-frame or r15 is a NaT
|
||||
|
||||
(p15) ssm psr.i // M2 restore psr.i
|
||||
(p14) br.call.sptk.many b6=b6 // B invoke syscall-handker (ignore return addr)
|
||||
br.cond.spnt.many ia64_trace_syscall // B do syscall-tracing thingamagic
|
||||
// NOT REACHED
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// On entry, we optimistically assumed that we're coming from user-space.
|
||||
// For the rare cases where a system-call is done from within the kernel,
|
||||
// we fix things up at this point:
|
||||
.break_fixup:
|
||||
add r1=-IA64_PT_REGS_SIZE,sp // A allocate space for pt_regs structure
|
||||
mov ar.rnat=r24 // M2 restore kernel's AR.RNAT
|
||||
;;
|
||||
mov ar.bspstore=r23 // M2 restore kernel's AR.BSPSTORE
|
||||
br.cond.sptk .back_from_break_fixup
|
||||
END(break_fault)
|
||||
|
||||
.org ia64_ivt+0x3000
|
||||
|
@ -842,8 +878,6 @@ END(interrupt)
|
|||
* - r31: saved pr
|
||||
* - b0: original contents (to be saved)
|
||||
* On exit:
|
||||
* - executing on bank 1 registers
|
||||
* - psr.ic enabled, interrupts restored
|
||||
* - p10: TRUE if syscall is invoked with more than 8 out
|
||||
* registers or r15's Nat is true
|
||||
* - r1: kernel's gp
|
||||
|
@ -851,8 +885,11 @@ END(interrupt)
|
|||
* - r8: -EINVAL if p10 is true
|
||||
* - r12: points to kernel stack
|
||||
* - r13: points to current task
|
||||
* - r14: preserved (same as on entry)
|
||||
* - p13: preserved
|
||||
* - p15: TRUE if interrupts need to be re-enabled
|
||||
* - ar.fpsr: set to kernel settings
|
||||
* - b6: preserved (same as on entry)
|
||||
*/
|
||||
GLOBAL_ENTRY(ia64_syscall_setup)
|
||||
#if PT(B6) != 0
|
||||
|
@ -920,10 +957,10 @@ GLOBAL_ENTRY(ia64_syscall_setup)
|
|||
(p13) mov in5=-1
|
||||
;;
|
||||
st8 [r16]=r21,PT(R8)-PT(AR_FPSR) // save ar.fpsr
|
||||
tnat.nz p14,p0=in6
|
||||
tnat.nz p13,p0=in6
|
||||
cmp.lt p10,p9=r11,r8 // frame size can't be more than local+8
|
||||
;;
|
||||
stf8 [r16]=f1 // ensure pt_regs.r8 != 0 (see handle_syscall_error)
|
||||
mov r8=1
|
||||
(p9) tnat.nz p10,p0=r15
|
||||
adds r12=-16,r1 // switch to kernel memory stack (with 16 bytes of scratch)
|
||||
|
||||
|
@ -934,9 +971,9 @@ GLOBAL_ENTRY(ia64_syscall_setup)
|
|||
mov r13=r2 // establish `current'
|
||||
movl r1=__gp // establish kernel global pointer
|
||||
;;
|
||||
(p14) mov in6=-1
|
||||
st8 [r16]=r8 // ensure pt_regs.r8 != 0 (see handle_syscall_error)
|
||||
(p13) mov in6=-1
|
||||
(p8) mov in7=-1
|
||||
nop.i 0
|
||||
|
||||
cmp.eq pSys,pNonSys=r0,r0 // set pSys=1, pNonSys=0
|
||||
movl r17=FPSR_DEFAULT
|
||||
|
@ -1007,6 +1044,8 @@ END(dispatch_illegal_op_fault)
|
|||
FAULT(17)
|
||||
|
||||
ENTRY(non_syscall)
|
||||
mov ar.rsc=r27 // restore ar.rsc before SAVE_MIN_WITH_COVER
|
||||
;;
|
||||
SAVE_MIN_WITH_COVER
|
||||
|
||||
// There is no particular reason for this code to be here, other than that
|
||||
|
@ -1204,6 +1243,25 @@ END(disabled_fp_reg)
|
|||
// 0x5600 Entry 26 (size 16 bundles) Nat Consumption (11,23,37,50)
|
||||
ENTRY(nat_consumption)
|
||||
DBG_FAULT(26)
|
||||
|
||||
mov r16=cr.ipsr
|
||||
mov r17=cr.isr
|
||||
mov r31=pr // save PR
|
||||
;;
|
||||
and r18=0xf,r17 // r18 = cr.ipsr.code{3:0}
|
||||
tbit.z p6,p0=r17,IA64_ISR_NA_BIT
|
||||
;;
|
||||
cmp.ne.or p6,p0=IA64_ISR_CODE_LFETCH,r18
|
||||
dep r16=-1,r16,IA64_PSR_ED_BIT,1
|
||||
(p6) br.cond.spnt 1f // branch if (cr.ispr.na == 0 || cr.ipsr.code{3:0} != LFETCH)
|
||||
;;
|
||||
mov cr.ipsr=r16 // set cr.ipsr.na
|
||||
mov pr=r31,-1
|
||||
;;
|
||||
rfi
|
||||
|
||||
1: mov pr=r31,-1
|
||||
;;
|
||||
FAULT(26)
|
||||
END(nat_consumption)
|
||||
|
||||
|
|
|
@ -725,12 +725,32 @@ convert_to_non_syscall (struct task_struct *child, struct pt_regs *pt,
|
|||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Note: at the time of this call, the target task is blocked
|
||||
* in notify_resume_user() and by clearling PRED_LEAVE_SYSCALL
|
||||
* (aka, "pLvSys") we redirect execution from
|
||||
* .work_pending_syscall_end to .work_processed_kernel.
|
||||
*/
|
||||
unw_get_pr(&prev_info, &pr);
|
||||
pr &= ~(1UL << PRED_SYSCALL);
|
||||
pr &= ~((1UL << PRED_SYSCALL) | (1UL << PRED_LEAVE_SYSCALL));
|
||||
pr |= (1UL << PRED_NON_SYSCALL);
|
||||
unw_set_pr(&prev_info, pr);
|
||||
|
||||
pt->cr_ifs = (1UL << 63) | cfm;
|
||||
/*
|
||||
* Clear the memory that is NOT written on syscall-entry to
|
||||
* ensure we do not leak kernel-state to user when execution
|
||||
* resumes.
|
||||
*/
|
||||
pt->r2 = 0;
|
||||
pt->r3 = 0;
|
||||
pt->r14 = 0;
|
||||
memset(&pt->r16, 0, 16*8); /* clear r16-r31 */
|
||||
memset(&pt->f6, 0, 6*16); /* clear f6-f11 */
|
||||
pt->b7 = 0;
|
||||
pt->ar_ccv = 0;
|
||||
pt->ar_csd = 0;
|
||||
pt->ar_ssd = 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -72,6 +72,8 @@ DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
|
|||
unsigned long ia64_cycles_per_usec;
|
||||
struct ia64_boot_param *ia64_boot_param;
|
||||
struct screen_info screen_info;
|
||||
unsigned long vga_console_iobase;
|
||||
unsigned long vga_console_membase;
|
||||
|
||||
unsigned long ia64_max_cacheline_size;
|
||||
unsigned long ia64_iobase; /* virtual address for I/O accesses */
|
||||
|
@ -273,23 +275,25 @@ io_port_init (void)
|
|||
static inline int __init
|
||||
early_console_setup (char *cmdline)
|
||||
{
|
||||
int earlycons = 0;
|
||||
|
||||
#ifdef CONFIG_SERIAL_SGI_L1_CONSOLE
|
||||
{
|
||||
extern int sn_serial_console_early_setup(void);
|
||||
if (!sn_serial_console_early_setup())
|
||||
return 0;
|
||||
earlycons++;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_EFI_PCDP
|
||||
if (!efi_setup_pcdp_console(cmdline))
|
||||
return 0;
|
||||
earlycons++;
|
||||
#endif
|
||||
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||
if (!early_serial_console_init(cmdline))
|
||||
return 0;
|
||||
earlycons++;
|
||||
#endif
|
||||
|
||||
return -1;
|
||||
return (earlycons) ? 0 : -1;
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
|
|
@ -231,13 +231,16 @@ smp_flush_tlb_all (void)
|
|||
void
|
||||
smp_flush_tlb_mm (struct mm_struct *mm)
|
||||
{
|
||||
preempt_disable();
|
||||
/* this happens for the common case of a single-threaded fork(): */
|
||||
if (likely(mm == current->active_mm && atomic_read(&mm->mm_users) == 1))
|
||||
{
|
||||
local_finish_flush_tlb_mm(mm);
|
||||
preempt_enable();
|
||||
return;
|
||||
}
|
||||
|
||||
preempt_enable();
|
||||
/*
|
||||
* We could optimize this further by using mm->cpu_vm_mask to track which CPUs
|
||||
* have been running in the address space. It's not clear that this is worth the
|
||||
|
|
|
@ -384,7 +384,7 @@ static int __init sn_pci_init(void)
|
|||
extern void register_sn_procfs(void);
|
||||
#endif
|
||||
|
||||
if (!ia64_platform_is("sn2") || IS_RUNNING_ON_SIMULATOR())
|
||||
if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM())
|
||||
return 0;
|
||||
|
||||
/*
|
||||
|
|
|
@ -9,12 +9,16 @@
|
|||
#include <linux/module.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/delay.h>
|
||||
#include <asm/vga.h>
|
||||
#include <asm/sn/nodepda.h>
|
||||
#include <asm/sn/simulator.h>
|
||||
#include <asm/sn/pda.h>
|
||||
#include <asm/sn/sn_cpuid.h>
|
||||
#include <asm/sn/shub_mmr.h>
|
||||
|
||||
#define IS_LEGACY_VGA_IOPORT(p) \
|
||||
(((p) >= 0x3b0 && (p) <= 0x3bb) || ((p) >= 0x3c0 && (p) <= 0x3df))
|
||||
|
||||
/**
|
||||
* sn_io_addr - convert an in/out port to an i/o address
|
||||
* @port: port to convert
|
||||
|
@ -26,6 +30,8 @@
|
|||
void *sn_io_addr(unsigned long port)
|
||||
{
|
||||
if (!IS_RUNNING_ON_SIMULATOR()) {
|
||||
if (IS_LEGACY_VGA_IOPORT(port))
|
||||
port += vga_console_iobase;
|
||||
/* On sn2, legacy I/O ports don't point at anything */
|
||||
if (port < (64 * 1024))
|
||||
return NULL;
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <asm/machvec.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/vga.h>
|
||||
#include <asm/sn/arch.h>
|
||||
#include <asm/sn/addrs.h>
|
||||
#include <asm/sn/pda.h>
|
||||
|
@ -95,6 +96,7 @@ u8 sn_coherency_id;
|
|||
EXPORT_SYMBOL(sn_coherency_id);
|
||||
u8 sn_region_size;
|
||||
EXPORT_SYMBOL(sn_region_size);
|
||||
int sn_prom_type; /* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */
|
||||
|
||||
short physical_node_map[MAX_PHYSNODE_ID];
|
||||
|
||||
|
@ -273,14 +275,17 @@ void __init sn_setup(char **cmdline_p)
|
|||
|
||||
ia64_sn_plat_set_error_handling_features();
|
||||
|
||||
/*
|
||||
* If the generic code has enabled vga console support - lets
|
||||
* get rid of it again. This is a kludge for the fact that ACPI
|
||||
* currtently has no way of informing us if legacy VGA is available
|
||||
* or not.
|
||||
*/
|
||||
#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
|
||||
if (conswitchp == &vga_con) {
|
||||
/*
|
||||
* If there was a primary vga adapter identified through the
|
||||
* EFI PCDP table, make it the preferred console. Otherwise
|
||||
* zero out conswitchp.
|
||||
*/
|
||||
|
||||
if (vga_console_membase) {
|
||||
/* usable vga ... make tty0 the preferred default console */
|
||||
add_preferred_console("tty", 0, NULL);
|
||||
} else {
|
||||
printk(KERN_DEBUG "SGI: Disabling VGA console\n");
|
||||
#ifdef CONFIG_DUMMY_CONSOLE
|
||||
conswitchp = &dummy_con;
|
||||
|
@ -455,6 +460,14 @@ void __init sn_cpu_init(void)
|
|||
int i;
|
||||
static int wars_have_been_checked;
|
||||
|
||||
if (smp_processor_id() == 0 && IS_MEDUSA()) {
|
||||
if (ia64_sn_is_fake_prom())
|
||||
sn_prom_type = 2;
|
||||
else
|
||||
sn_prom_type = 1;
|
||||
printk("Running on medusa with %s PROM\n", (sn_prom_type == 1) ? "real" : "fake");
|
||||
}
|
||||
|
||||
memset(pda, 0, sizeof(pda));
|
||||
if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, &sn_hub_info->nasid_bitmask, &sn_hub_info->nasid_shift,
|
||||
&sn_system_size, &sn_sharing_domain_size, &sn_partition_id,
|
||||
|
@ -552,6 +565,10 @@ static void __init scan_for_ionodes(void)
|
|||
int nasid = 0;
|
||||
lboard_t *brd;
|
||||
|
||||
/* fakeprom does not support klgraph */
|
||||
if (IS_RUNNING_ON_FAKE_PROM())
|
||||
return;
|
||||
|
||||
/* Setup ionodes with memory */
|
||||
for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid += 2) {
|
||||
char *klgraph_header;
|
||||
|
@ -563,8 +580,6 @@ static void __init scan_for_ionodes(void)
|
|||
cnodeid = -1;
|
||||
klgraph_header = __va(ia64_sn_get_klconfig_addr(nasid));
|
||||
if (!klgraph_header) {
|
||||
if (IS_RUNNING_ON_SIMULATOR())
|
||||
continue;
|
||||
BUG(); /* All nodes must have klconfig tables! */
|
||||
}
|
||||
cnodeid = nasid_to_cnodeid(nasid);
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
* Copyright (C) 2000-2004 Silicon Graphics, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <asm/types.h>
|
||||
#include <asm/sn/shub_mmr.h>
|
||||
|
||||
#define DEADLOCKBIT SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_SHFT
|
||||
|
|
|
@ -204,8 +204,8 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num,
|
|||
cx_dev->dev.parent = NULL;
|
||||
cx_dev->dev.bus = &tiocx_bus_type;
|
||||
cx_dev->dev.release = tiocx_bus_release;
|
||||
snprintf(cx_dev->dev.bus_id, BUS_ID_SIZE, "%d.0x%x",
|
||||
cx_dev->cx_id.nasid, cx_dev->cx_id.part_num);
|
||||
snprintf(cx_dev->dev.bus_id, BUS_ID_SIZE, "%d",
|
||||
cx_dev->cx_id.nasid);
|
||||
device_register(&cx_dev->dev);
|
||||
get_device(&cx_dev->dev);
|
||||
|
||||
|
@ -236,7 +236,6 @@ int cx_device_unregister(struct cx_dev *cx_dev)
|
|||
*/
|
||||
static int cx_device_reload(struct cx_dev *cx_dev)
|
||||
{
|
||||
device_remove_file(&cx_dev->dev, &dev_attr_cxdev_control);
|
||||
cx_device_unregister(cx_dev);
|
||||
return cx_device_register(cx_dev->cx_id.nasid, cx_dev->cx_id.part_num,
|
||||
cx_dev->cx_id.mfg_num, cx_dev->hubdev);
|
||||
|
@ -383,6 +382,7 @@ static int is_fpga_brick(int nasid)
|
|||
switch (tiocx_btchar_get(nasid)) {
|
||||
case L1_BRICKTYPE_SA:
|
||||
case L1_BRICKTYPE_ATHENA:
|
||||
case L1_BRICKTYPE_DAYTONA:
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -409,7 +409,7 @@ static int tiocx_reload(struct cx_dev *cx_dev)
|
|||
uint64_t cx_id;
|
||||
|
||||
cx_id =
|
||||
*(volatile int32_t *)(TIO_SWIN_BASE(nasid, TIOCX_CORELET) +
|
||||
*(volatile uint64_t *)(TIO_SWIN_BASE(nasid, TIOCX_CORELET) +
|
||||
WIDGET_ID);
|
||||
part_num = XWIDGET_PART_NUM(cx_id);
|
||||
mfg_num = XWIDGET_MFG_NUM(cx_id);
|
||||
|
@ -458,6 +458,10 @@ static ssize_t store_cxdev_control(struct device *dev, struct device_attribute *
|
|||
|
||||
switch (n) {
|
||||
case 1:
|
||||
tio_corelet_reset(cx_dev->cx_id.nasid, TIOCX_CORELET);
|
||||
tiocx_reload(cx_dev);
|
||||
break;
|
||||
case 2:
|
||||
tiocx_reload(cx_dev);
|
||||
break;
|
||||
case 3:
|
||||
|
@ -537,7 +541,7 @@ static void __exit tiocx_exit(void)
|
|||
bus_unregister(&tiocx_bus_type);
|
||||
}
|
||||
|
||||
module_init(tiocx_init);
|
||||
subsys_initcall(tiocx_init);
|
||||
module_exit(tiocx_exit);
|
||||
|
||||
/************************************************************************
|
||||
|
|
|
@ -336,7 +336,7 @@ tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr)
|
|||
if (!ct_addr)
|
||||
return 0;
|
||||
|
||||
bus_addr = (dma_addr_t) (ct_addr & 0xffffffffffff);
|
||||
bus_addr = (dma_addr_t) (ct_addr & 0xffffffffffffUL);
|
||||
node_upper = ct_addr >> 48;
|
||||
|
||||
if (node_upper > 64) {
|
||||
|
@ -464,7 +464,7 @@ tioca_dma_mapped(struct pci_dev *pdev, uint64_t paddr, size_t req_size)
|
|||
* For mappings created using the direct modes (64 or 48) there are no
|
||||
* resources to release.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
tioca_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir)
|
||||
{
|
||||
int i, entry;
|
||||
|
@ -514,7 +514,7 @@ tioca_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir)
|
|||
* The mapping mode used is based on the devices dma_mask. As a last resort
|
||||
* use the GART mapped mode.
|
||||
*/
|
||||
uint64_t
|
||||
static uint64_t
|
||||
tioca_dma_map(struct pci_dev *pdev, uint64_t paddr, size_t byte_count)
|
||||
{
|
||||
uint64_t mapaddr;
|
||||
|
@ -580,7 +580,7 @@ tioca_error_intr_handler(int irq, void *arg, struct pt_regs *pt)
|
|||
* On successful setup, returns the kernel version of tioca_common back to
|
||||
* the caller.
|
||||
*/
|
||||
void *
|
||||
static void *
|
||||
tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft)
|
||||
{
|
||||
struct tioca_common *tioca_common;
|
||||
|
|
|
@ -506,7 +506,7 @@ CONFIG_HW_CONSOLE=y
|
|||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=8
|
||||
CONFIG_SERIAL_8250_NR_UARTS=17
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
|
|
|
@ -662,7 +662,7 @@ CONFIG_HW_CONSOLE=y
|
|||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_CS=m
|
||||
CONFIG_SERIAL_8250_NR_UARTS=8
|
||||
CONFIG_SERIAL_8250_NR_UARTS=17
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
|
|
|
@ -514,7 +514,7 @@ CONFIG_HW_CONSOLE=y
|
|||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_NR_UARTS=13
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
|
|
|
@ -661,7 +661,7 @@ CONFIG_HW_CONSOLE=y
|
|||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_NR_UARTS=13
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
|
|
|
@ -517,7 +517,7 @@ CONFIG_HW_CONSOLE=y
|
|||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_NR_UARTS=13
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/console.h>
|
||||
#include <linux/efi.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/vga.h>
|
||||
#include "pcdp.h"
|
||||
|
||||
static int __init
|
||||
|
@ -40,10 +41,27 @@ setup_serial_console(struct pcdp_uart *uart)
|
|||
}
|
||||
|
||||
static int __init
|
||||
setup_vga_console(struct pcdp_vga *vga)
|
||||
setup_vga_console(struct pcdp_device *dev)
|
||||
{
|
||||
#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
|
||||
if (efi_mem_type(0xA0000) == EFI_CONVENTIONAL_MEMORY) {
|
||||
u8 *if_ptr;
|
||||
|
||||
if_ptr = ((u8 *)dev + sizeof(struct pcdp_device));
|
||||
if (if_ptr[0] == PCDP_IF_PCI) {
|
||||
struct pcdp_if_pci if_pci;
|
||||
|
||||
/* struct copy since ifptr might not be correctly aligned */
|
||||
|
||||
memcpy(&if_pci, if_ptr, sizeof(if_pci));
|
||||
|
||||
if (if_pci.trans & PCDP_PCI_TRANS_IOPORT)
|
||||
vga_console_iobase = if_pci.ioport_tra;
|
||||
|
||||
if (if_pci.trans & PCDP_PCI_TRANS_MMIO)
|
||||
vga_console_membase = if_pci.mmio_tra;
|
||||
}
|
||||
|
||||
if (efi_mem_type(vga_console_membase + 0xA0000) == EFI_CONVENTIONAL_MEMORY) {
|
||||
printk(KERN_ERR "PCDP: VGA selected, but frame buffer is not MMIO!\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -95,7 +113,7 @@ efi_setup_pcdp_console(char *cmdline)
|
|||
dev = (struct pcdp_device *) ((u8 *) dev + dev->length)) {
|
||||
if (dev->flags & PCDP_PRIMARY_CONSOLE) {
|
||||
if (dev->type == PCDP_CONSOLE_VGA) {
|
||||
return setup_vga_console((struct pcdp_vga *) dev);
|
||||
return setup_vga_console(dev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,11 +52,34 @@ struct pcdp_uart {
|
|||
u32 clock_rate;
|
||||
u8 pci_prog_intfc;
|
||||
u8 flags;
|
||||
};
|
||||
} __attribute__((packed));
|
||||
|
||||
#define PCDP_IF_PCI 1
|
||||
|
||||
/* pcdp_if_pci.trans */
|
||||
#define PCDP_PCI_TRANS_IOPORT 0x02
|
||||
#define PCDP_PCI_TRANS_MMIO 0x01
|
||||
|
||||
struct pcdp_if_pci {
|
||||
u8 interconnect;
|
||||
u8 reserved;
|
||||
u16 length;
|
||||
u8 segment;
|
||||
u8 bus;
|
||||
u8 dev;
|
||||
u8 fun;
|
||||
u16 dev_id;
|
||||
u16 vendor_id;
|
||||
u32 acpi_interrupt;
|
||||
u64 mmio_tra;
|
||||
u64 ioport_tra;
|
||||
u8 flags;
|
||||
u8 trans;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct pcdp_vga {
|
||||
u8 count; /* address space descriptors */
|
||||
};
|
||||
} __attribute__((packed));
|
||||
|
||||
/* pcdp_device.flags */
|
||||
#define PCDP_PRIMARY_CONSOLE 1
|
||||
|
@ -66,7 +89,9 @@ struct pcdp_device {
|
|||
u8 flags;
|
||||
u16 length;
|
||||
u16 efi_index;
|
||||
};
|
||||
/* next data is pcdp_if_pci or pcdp_if_acpi (not yet supported) */
|
||||
/* next data is device specific type (currently only pcdp_vga) */
|
||||
} __attribute__((packed));
|
||||
|
||||
struct pcdp {
|
||||
u8 signature[4];
|
||||
|
@ -81,4 +106,4 @@ struct pcdp {
|
|||
u32 num_uarts;
|
||||
struct pcdp_uart uart[0]; /* actual size is num_uarts */
|
||||
/* remainder of table is pcdp_device structures */
|
||||
};
|
||||
} __attribute__((packed));
|
||||
|
|
|
@ -144,7 +144,7 @@ static ssize_t atxp1_storevcore(struct device *dev, struct device_attribute *att
|
|||
if (vid == cvid)
|
||||
return count;
|
||||
|
||||
dev_info(dev, "Setting VCore to %d mV (0x%02x)\n", vcore, vid);
|
||||
dev_dbg(dev, "Setting VCore to %d mV (0x%02x)\n", vcore, vid);
|
||||
|
||||
/* Write every 25 mV step to increase stability */
|
||||
if (cvid > vid) {
|
||||
|
|
|
@ -68,7 +68,6 @@ struct etherh_priv {
|
|||
void __iomem *dma_base;
|
||||
unsigned int id;
|
||||
void __iomem *ctrl_port;
|
||||
void __iomem *base;
|
||||
unsigned char ctrl;
|
||||
u32 supported;
|
||||
};
|
||||
|
@ -178,7 +177,7 @@ etherh_setif(struct net_device *dev)
|
|||
switch (etherh_priv(dev)->id) {
|
||||
case PROD_I3_ETHERLAN600:
|
||||
case PROD_I3_ETHERLAN600A:
|
||||
addr = etherh_priv(dev)->base + EN0_RCNTHI;
|
||||
addr = (void *)dev->base_addr + EN0_RCNTHI;
|
||||
|
||||
switch (dev->if_port) {
|
||||
case IF_PORT_10BASE2:
|
||||
|
@ -219,7 +218,7 @@ etherh_getifstat(struct net_device *dev)
|
|||
switch (etherh_priv(dev)->id) {
|
||||
case PROD_I3_ETHERLAN600:
|
||||
case PROD_I3_ETHERLAN600A:
|
||||
addr = etherh_priv(dev)->base + EN0_RCNTHI;
|
||||
addr = (void *)dev->base_addr + EN0_RCNTHI;
|
||||
switch (dev->if_port) {
|
||||
case IF_PORT_10BASE2:
|
||||
stat = 1;
|
||||
|
@ -282,7 +281,7 @@ static void
|
|||
etherh_reset(struct net_device *dev)
|
||||
{
|
||||
struct ei_device *ei_local = netdev_priv(dev);
|
||||
void __iomem *addr = etherh_priv(dev)->base;
|
||||
void __iomem *addr = (void *)dev->base_addr;
|
||||
|
||||
writeb(E8390_NODMA+E8390_PAGE0+E8390_STOP, addr);
|
||||
|
||||
|
@ -328,7 +327,7 @@ etherh_block_output (struct net_device *dev, int count, const unsigned char *buf
|
|||
|
||||
ei_local->dmaing = 1;
|
||||
|
||||
addr = etherh_priv(dev)->base;
|
||||
addr = (void *)dev->base_addr;
|
||||
dma_base = etherh_priv(dev)->dma_base;
|
||||
|
||||
count = (count + 1) & ~1;
|
||||
|
@ -388,7 +387,7 @@ etherh_block_input (struct net_device *dev, int count, struct sk_buff *skb, int
|
|||
|
||||
ei_local->dmaing = 1;
|
||||
|
||||
addr = etherh_priv(dev)->base;
|
||||
addr = (void *)dev->base_addr;
|
||||
dma_base = etherh_priv(dev)->dma_base;
|
||||
|
||||
buf = skb->data;
|
||||
|
@ -428,7 +427,7 @@ etherh_get_header (struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_p
|
|||
|
||||
ei_local->dmaing = 1;
|
||||
|
||||
addr = etherh_priv(dev)->base;
|
||||
addr = (void *)dev->base_addr;
|
||||
dma_base = etherh_priv(dev)->dma_base;
|
||||
|
||||
writeb (E8390_NODMA | E8390_PAGE0 | E8390_START, addr + E8390_CMD);
|
||||
|
@ -697,8 +696,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
|
|||
eh->ctrl_port = eh->ioc_fast;
|
||||
}
|
||||
|
||||
eh->base = eh->memc + data->ns8390_offset;
|
||||
dev->base_addr = (unsigned long)eh->base;
|
||||
dev->base_addr = (unsigned long)eh->memc + data->ns8390_offset;
|
||||
eh->dma_base = eh->memc + data->dataport_offset;
|
||||
eh->ctrl_port += data->ctrlport_offset;
|
||||
|
||||
|
|
|
@ -105,7 +105,7 @@ static struct old_serial_port old_serial_port[] = {
|
|||
SERIAL_PORT_DFNS /* defined in asm/serial.h */
|
||||
};
|
||||
|
||||
#define UART_NR (ARRAY_SIZE(old_serial_port) + CONFIG_SERIAL_8250_NR_UARTS)
|
||||
#define UART_NR CONFIG_SERIAL_8250_NR_UARTS
|
||||
|
||||
#ifdef CONFIG_SERIAL_8250_RSA
|
||||
|
||||
|
@ -993,21 +993,24 @@ static void autoconfig_irq(struct uart_8250_port *up)
|
|||
up->port.irq = (irq > 0) ? irq : 0;
|
||||
}
|
||||
|
||||
static inline void __stop_tx(struct uart_8250_port *p)
|
||||
{
|
||||
if (p->ier & UART_IER_THRI) {
|
||||
p->ier &= ~UART_IER_THRI;
|
||||
serial_out(p, UART_IER, p->ier);
|
||||
}
|
||||
}
|
||||
|
||||
static void serial8250_stop_tx(struct uart_port *port, unsigned int tty_stop)
|
||||
{
|
||||
struct uart_8250_port *up = (struct uart_8250_port *)port;
|
||||
|
||||
if (up->ier & UART_IER_THRI) {
|
||||
up->ier &= ~UART_IER_THRI;
|
||||
serial_out(up, UART_IER, up->ier);
|
||||
}
|
||||
__stop_tx(up);
|
||||
|
||||
/*
|
||||
* We only do this from uart_stop - if we run out of
|
||||
* characters to send, we don't want to prevent the
|
||||
* FIFO from emptying.
|
||||
* We really want to stop the transmitter from sending.
|
||||
*/
|
||||
if (up->port.type == PORT_16C950 && tty_stop) {
|
||||
if (up->port.type == PORT_16C950) {
|
||||
up->acr |= UART_ACR_TXDIS;
|
||||
serial_icr_write(up, UART_ACR, up->acr);
|
||||
}
|
||||
|
@ -1031,10 +1034,11 @@ static void serial8250_start_tx(struct uart_port *port, unsigned int tty_start)
|
|||
transmit_chars(up);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We only do this from uart_start
|
||||
* Re-enable the transmitter if we disabled it.
|
||||
*/
|
||||
if (tty_start && up->port.type == PORT_16C950) {
|
||||
if (up->port.type == PORT_16C950 && up->acr & UART_ACR_TXDIS) {
|
||||
up->acr &= ~UART_ACR_TXDIS;
|
||||
serial_icr_write(up, UART_ACR, up->acr);
|
||||
}
|
||||
|
@ -1155,7 +1159,7 @@ static _INLINE_ void transmit_chars(struct uart_8250_port *up)
|
|||
return;
|
||||
}
|
||||
if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) {
|
||||
serial8250_stop_tx(&up->port, 0);
|
||||
__stop_tx(up);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1174,7 +1178,7 @@ static _INLINE_ void transmit_chars(struct uart_8250_port *up)
|
|||
DEBUG_INTR("THRE...");
|
||||
|
||||
if (uart_circ_empty(xmit))
|
||||
serial8250_stop_tx(&up->port, 0);
|
||||
__stop_tx(up);
|
||||
}
|
||||
|
||||
static _INLINE_ void check_modem_status(struct uart_8250_port *up)
|
||||
|
@ -1376,13 +1380,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port)
|
|||
static unsigned int serial8250_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
struct uart_8250_port *up = (struct uart_8250_port *)port;
|
||||
unsigned long flags;
|
||||
unsigned char status;
|
||||
unsigned int ret;
|
||||
|
||||
spin_lock_irqsave(&up->port.lock, flags);
|
||||
status = serial_in(up, UART_MSR);
|
||||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
|
||||
ret = 0;
|
||||
if (status & UART_MSR_DCD)
|
||||
|
|
|
@ -86,7 +86,7 @@ config SERIAL_8250_ACPI
|
|||
namespace, say Y here. If unsure, say N.
|
||||
|
||||
config SERIAL_8250_NR_UARTS
|
||||
int "Maximum number of non-legacy 8250/16550 serial ports"
|
||||
int "Maximum number of 8250/16550 serial ports"
|
||||
depends on SERIAL_8250
|
||||
default "4"
|
||||
help
|
||||
|
|
|
@ -556,13 +556,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port)
|
|||
static unsigned int serial8250_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
struct uart_8250_port *up = (struct uart_8250_port *)port;
|
||||
unsigned long flags;
|
||||
unsigned char status;
|
||||
unsigned int ret;
|
||||
|
||||
spin_lock_irqsave(&up->port.lock, flags);
|
||||
status = serial_in(up, UART_MSR);
|
||||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
|
||||
ret = 0;
|
||||
if (status & UART_MSR_DCD)
|
||||
|
|
|
@ -518,27 +518,28 @@ static irqreturn_t ip22zilog_interrupt(int irq, void *dev_id, struct pt_regs *re
|
|||
static __inline__ unsigned char ip22zilog_read_channel_status(struct uart_port *port)
|
||||
{
|
||||
struct zilog_channel *channel;
|
||||
unsigned long flags;
|
||||
unsigned char status;
|
||||
|
||||
spin_lock_irqsave(&port->lock, flags);
|
||||
|
||||
channel = ZILOG_CHANNEL_FROM_PORT(port);
|
||||
status = readb(&channel->control);
|
||||
ZSDELAY();
|
||||
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/* The port lock is not held. */
|
||||
static unsigned int ip22zilog_tx_empty(struct uart_port *port)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned char status;
|
||||
unsigned int ret;
|
||||
|
||||
spin_lock_irqsave(&port->lock, flags);
|
||||
|
||||
status = ip22zilog_read_channel_status(port);
|
||||
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
|
||||
if (status & Tx_BUF_EMP)
|
||||
ret = TIOCSER_TEMT;
|
||||
else
|
||||
|
@ -547,7 +548,7 @@ static unsigned int ip22zilog_tx_empty(struct uart_port *port)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* The port lock is not held. */
|
||||
/* The port lock is held and interrupts are disabled. */
|
||||
static unsigned int ip22zilog_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
unsigned char status;
|
||||
|
|
|
@ -1058,12 +1058,9 @@ mpsc_get_mctrl(struct uart_port *port)
|
|||
{
|
||||
struct mpsc_port_info *pi = (struct mpsc_port_info *)port;
|
||||
u32 mflags, status;
|
||||
ulong iflags;
|
||||
|
||||
spin_lock_irqsave(&pi->port.lock, iflags);
|
||||
status = (pi->mirror_regs) ? pi->MPSC_CHR_10_m :
|
||||
readl(pi->mpsc_base + MPSC_CHR_10);
|
||||
spin_unlock_irqrestore(&pi->port.lock, iflags);
|
||||
|
||||
mflags = 0;
|
||||
if (status & 0x1)
|
||||
|
|
|
@ -604,7 +604,7 @@ static void pmz_set_mctrl(struct uart_port *port, unsigned int mctrl)
|
|||
/*
|
||||
* Get Modem Control bits (only the input ones, the core will
|
||||
* or that with a cached value of the control ones)
|
||||
* The port lock is not held.
|
||||
* The port lock is held and interrupts are disabled.
|
||||
*/
|
||||
static unsigned int pmz_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
|
@ -615,7 +615,7 @@ static unsigned int pmz_get_mctrl(struct uart_port *port)
|
|||
if (ZS_IS_ASLEEP(uap) || uap->node == NULL)
|
||||
return 0;
|
||||
|
||||
status = pmz_peek_status(to_pmz(port));
|
||||
status = read_zsreg(uap, R0);
|
||||
|
||||
ret = 0;
|
||||
if (status & DCD)
|
||||
|
|
|
@ -274,14 +274,11 @@ static unsigned int serial_pxa_tx_empty(struct uart_port *port)
|
|||
static unsigned int serial_pxa_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
struct uart_pxa_port *up = (struct uart_pxa_port *)port;
|
||||
unsigned long flags;
|
||||
unsigned char status;
|
||||
unsigned int ret;
|
||||
|
||||
return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
|
||||
spin_lock_irqsave(&up->port.lock, flags);
|
||||
status = serial_in(up, UART_MSR);
|
||||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
|
||||
ret = 0;
|
||||
if (status & UART_MSR_DCD)
|
||||
|
|
|
@ -182,6 +182,13 @@ static int uart_startup(struct uart_state *state, int init_hw)
|
|||
uart_set_mctrl(port, TIOCM_RTS | TIOCM_DTR);
|
||||
}
|
||||
|
||||
if (info->flags & UIF_CTS_FLOW) {
|
||||
spin_lock_irq(&port->lock);
|
||||
if (!(port->ops->get_mctrl(port) & TIOCM_CTS))
|
||||
info->tty->hw_stopped = 1;
|
||||
spin_unlock_irq(&port->lock);
|
||||
}
|
||||
|
||||
info->flags |= UIF_INITIALIZED;
|
||||
|
||||
clear_bit(TTY_IO_ERROR, &info->tty->flags);
|
||||
|
@ -828,7 +835,10 @@ static int uart_tiocmget(struct tty_struct *tty, struct file *file)
|
|||
if ((!file || !tty_hung_up_p(file)) &&
|
||||
!(tty->flags & (1 << TTY_IO_ERROR))) {
|
||||
result = port->mctrl;
|
||||
|
||||
spin_lock_irq(&port->lock);
|
||||
result |= port->ops->get_mctrl(port);
|
||||
spin_unlock_irq(&port->lock);
|
||||
}
|
||||
up(&state->sem);
|
||||
|
||||
|
@ -1131,6 +1141,16 @@ static void uart_set_termios(struct tty_struct *tty, struct termios *old_termios
|
|||
spin_unlock_irqrestore(&state->port->lock, flags);
|
||||
}
|
||||
|
||||
/* Handle turning on CRTSCTS */
|
||||
if (!(old_termios->c_cflag & CRTSCTS) && (cflag & CRTSCTS)) {
|
||||
spin_lock_irqsave(&state->port->lock, flags);
|
||||
if (!(state->port->ops->get_mctrl(state->port) & TIOCM_CTS)) {
|
||||
tty->hw_stopped = 1;
|
||||
state->port->ops->stop_tx(state->port, 0);
|
||||
}
|
||||
spin_unlock_irqrestore(&state->port->lock, flags);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* No need to wake up processes in open wait, since they
|
||||
|
@ -1369,6 +1389,7 @@ uart_block_til_ready(struct file *filp, struct uart_state *state)
|
|||
DECLARE_WAITQUEUE(wait, current);
|
||||
struct uart_info *info = state->info;
|
||||
struct uart_port *port = state->port;
|
||||
unsigned int mctrl;
|
||||
|
||||
info->blocked_open++;
|
||||
state->count--;
|
||||
|
@ -1416,7 +1437,10 @@ uart_block_til_ready(struct file *filp, struct uart_state *state)
|
|||
* and wait for the carrier to indicate that the
|
||||
* modem is ready for us.
|
||||
*/
|
||||
if (port->ops->get_mctrl(port) & TIOCM_CAR)
|
||||
spin_lock_irq(&port->lock);
|
||||
mctrl = port->ops->get_mctrl(port);
|
||||
spin_unlock_irq(&port->lock);
|
||||
if (mctrl & TIOCM_CAR)
|
||||
break;
|
||||
|
||||
up(&state->sem);
|
||||
|
@ -1618,7 +1642,9 @@ static int uart_line_info(char *buf, struct uart_driver *drv, int i)
|
|||
|
||||
if(capable(CAP_SYS_ADMIN))
|
||||
{
|
||||
spin_lock_irq(&port->lock);
|
||||
status = port->ops->get_mctrl(port);
|
||||
spin_unlock_irq(&port->lock);
|
||||
|
||||
ret += sprintf(buf + ret, " tx:%d rx:%d",
|
||||
port->icount.tx, port->icount.rx);
|
||||
|
|
|
@ -442,13 +442,10 @@ static unsigned int serial_txx9_tx_empty(struct uart_port *port)
|
|||
static unsigned int serial_txx9_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
struct uart_txx9_port *up = (struct uart_txx9_port *)port;
|
||||
unsigned long flags;
|
||||
unsigned int ret;
|
||||
|
||||
spin_lock_irqsave(&up->port.lock, flags);
|
||||
ret = ((sio_in(up, TXX9_SIFLCR) & TXX9_SIFLCR_RTSSC) ? 0 : TIOCM_RTS)
|
||||
| ((sio_in(up, TXX9_SICISR) & TXX9_SICISR_CTSS) ? 0 : TIOCM_CTS);
|
||||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -426,18 +426,15 @@ static void sunsab_set_mctrl(struct uart_port *port, unsigned int mctrl)
|
|||
sunsab_tx_idle(up);
|
||||
}
|
||||
|
||||
/* port->lock is not held. */
|
||||
/* port->lock is held by caller and interrupts are disabled. */
|
||||
static unsigned int sunsab_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
|
||||
unsigned long flags;
|
||||
unsigned char val;
|
||||
unsigned int result;
|
||||
|
||||
result = 0;
|
||||
|
||||
spin_lock_irqsave(&up->port.lock, flags);
|
||||
|
||||
val = readb(&up->regs->r.pvr);
|
||||
result |= (val & up->pvr_dsr_bit) ? 0 : TIOCM_DSR;
|
||||
|
||||
|
@ -447,8 +444,6 @@ static unsigned int sunsab_get_mctrl(struct uart_port *port)
|
|||
val = readb(&up->regs->r.star);
|
||||
result |= (val & SAB82532_STAR_CTS) ? TIOCM_CTS : 0;
|
||||
|
||||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -572,13 +572,10 @@ static unsigned int sunsu_tx_empty(struct uart_port *port)
|
|||
static unsigned int sunsu_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
|
||||
unsigned long flags;
|
||||
unsigned char status;
|
||||
unsigned int ret;
|
||||
|
||||
spin_lock_irqsave(&up->port.lock, flags);
|
||||
status = serial_in(up, UART_MSR);
|
||||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
|
||||
ret = 0;
|
||||
if (status & UART_MSR_DCD)
|
||||
|
|
|
@ -610,27 +610,28 @@ static irqreturn_t sunzilog_interrupt(int irq, void *dev_id, struct pt_regs *reg
|
|||
static __inline__ unsigned char sunzilog_read_channel_status(struct uart_port *port)
|
||||
{
|
||||
struct zilog_channel __iomem *channel;
|
||||
unsigned long flags;
|
||||
unsigned char status;
|
||||
|
||||
spin_lock_irqsave(&port->lock, flags);
|
||||
|
||||
channel = ZILOG_CHANNEL_FROM_PORT(port);
|
||||
status = sbus_readb(&channel->control);
|
||||
ZSDELAY();
|
||||
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/* The port lock is not held. */
|
||||
static unsigned int sunzilog_tx_empty(struct uart_port *port)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned char status;
|
||||
unsigned int ret;
|
||||
|
||||
spin_lock_irqsave(&port->lock, flags);
|
||||
|
||||
status = sunzilog_read_channel_status(port);
|
||||
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
|
||||
if (status & Tx_BUF_EMP)
|
||||
ret = TIOCSER_TEMT;
|
||||
else
|
||||
|
@ -639,7 +640,7 @@ static unsigned int sunzilog_tx_empty(struct uart_port *port)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* The port lock is not held. */
|
||||
/* The port lock is held and interrupts are disabled. */
|
||||
static unsigned int sunzilog_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
unsigned char status;
|
||||
|
|
|
@ -36,10 +36,16 @@ int reiserfs_ioctl (struct inode * inode, struct file * filp, unsigned int cmd,
|
|||
/* following two cases are taken from fs/ext2/ioctl.c by Remy
|
||||
Card (card@masi.ibp.fr) */
|
||||
case REISERFS_IOC_GETFLAGS:
|
||||
if (!reiserfs_attrs (inode->i_sb))
|
||||
return -ENOTTY;
|
||||
|
||||
flags = REISERFS_I(inode) -> i_attrs;
|
||||
i_attrs_to_sd_attrs( inode, ( __u16 * ) &flags );
|
||||
return put_user(flags, (int __user *) arg);
|
||||
case REISERFS_IOC_SETFLAGS: {
|
||||
if (!reiserfs_attrs (inode->i_sb))
|
||||
return -ENOTTY;
|
||||
|
||||
if (IS_RDONLY(inode))
|
||||
return -EROFS;
|
||||
|
||||
|
|
|
@ -1066,6 +1066,8 @@ static void handle_attrs( struct super_block *s )
|
|||
reiserfs_warning(s, "reiserfs: cannot support attributes until flag is set in super-block" );
|
||||
REISERFS_SB(s) -> s_mount_opt &= ~ ( 1 << REISERFS_ATTRS );
|
||||
}
|
||||
} else if (le32_to_cpu( rs -> s_flags ) & reiserfs_attrs_cleared) {
|
||||
REISERFS_SB(s)->s_mount_opt |= REISERFS_ATTRS;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,54 +22,9 @@
|
|||
#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define FOURPORT_FLAGS ASYNC_FOURPORT
|
||||
#define ACCENT_FLAGS 0
|
||||
#define BOCA_FLAGS 0
|
||||
#endif
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \
|
||||
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \
|
||||
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
|
||||
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define EXTRA_SERIAL_PORT_DEFNS \
|
||||
{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, /* ttyS4 */ \
|
||||
{ 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS }, /* ttyS5 */ \
|
||||
{ 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS }, /* ttyS6 */ \
|
||||
{ 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS }, /* ttyS7 */ \
|
||||
{ 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS }, /* ttyS8 */ \
|
||||
{ 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS }, /* ttyS9 */ \
|
||||
{ 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS }, /* ttyS10 */ \
|
||||
{ 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS }, /* ttyS11 */ \
|
||||
{ 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS }, /* ttyS12 */ \
|
||||
{ 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS }, /* ttyS13 */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS14 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS15 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS }, /* ttyS16 */ \
|
||||
{ 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS }, /* ttyS17 */ \
|
||||
{ 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS }, /* ttyS18 */ \
|
||||
{ 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS }, /* ttyS19 */ \
|
||||
{ 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS }, /* ttyS20 */ \
|
||||
{ 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS }, /* ttyS21 */ \
|
||||
{ 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS }, /* ttyS22 */ \
|
||||
{ 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS }, /* ttyS23 */ \
|
||||
{ 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS }, /* ttyS24 */ \
|
||||
{ 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS }, /* ttyS25 */ \
|
||||
{ 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS }, /* ttyS26 */ \
|
||||
{ 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS }, /* ttyS27 */ \
|
||||
{ 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS }, /* ttyS28 */ \
|
||||
{ 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS }, /* ttyS29 */ \
|
||||
{ 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS }, /* ttyS30 */ \
|
||||
{ 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS }, /* ttyS31 */
|
||||
#else
|
||||
#define EXTRA_SERIAL_PORT_DEFNS
|
||||
#endif
|
||||
|
||||
#define SERIAL_PORT_DFNS \
|
||||
STD_SERIAL_PORT_DEFNS \
|
||||
EXTRA_SERIAL_PORT_DEFNS
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "hardware.h"
|
||||
|
||||
.macro addruart,rx
|
||||
mrc p15, 0, \rx, c1, c0
|
||||
tst \rx, #1 @ MMU enabled?
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef __ASM_ARM_HARDWARE_ARM_TIMER_H
|
||||
#define __ASM_ARM_HARDWARE_ARM_TIMER_H
|
||||
|
||||
#define TIMER_LOAD 0x00
|
||||
#define TIMER_VALUE 0x04
|
||||
#define TIMER_CTRL 0x08
|
||||
#define TIMER_CTRL_ONESHOT (1 << 0)
|
||||
#define TIMER_CTRL_32BIT (1 << 1)
|
||||
#define TIMER_CTRL_DIV1 (0 << 2)
|
||||
#define TIMER_CTRL_DIV16 (1 << 2)
|
||||
#define TIMER_CTRL_DIV256 (2 << 2)
|
||||
#define TIMER_CTRL_IE (1 << 5) /* Interrupt Enable (versatile only) */
|
||||
#define TIMER_CTRL_PERIODIC (1 << 6)
|
||||
#define TIMER_CTRL_ENABLE (1 << 7)
|
||||
|
||||
#define TIMER_INTCLR 0x0c
|
||||
#define TIMER_RIS 0x10
|
||||
#define TIMER_MIS 0x14
|
||||
#define TIMER_BGLOAD 0x18
|
||||
|
||||
#endif
|
|
@ -290,7 +290,6 @@ do { \
|
|||
})
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#error SMP not supported
|
||||
|
||||
#define smp_mb() mb()
|
||||
#define smp_rmb() rmb()
|
||||
|
@ -304,6 +303,8 @@ do { \
|
|||
#define smp_wmb() barrier()
|
||||
#define smp_read_barrier_depends() do { } while(0)
|
||||
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
#if defined(CONFIG_CPU_SA1100) || defined(CONFIG_CPU_SA110)
|
||||
/*
|
||||
* On the StrongARM, "swp" is terminally broken since it bypasses the
|
||||
|
@ -316,9 +317,16 @@ do { \
|
|||
*
|
||||
* We choose (1) since its the "easiest" to achieve here and is not
|
||||
* dependent on the processor type.
|
||||
*
|
||||
* NOTE that this solution won't work on an SMP system, so explcitly
|
||||
* forbid it here.
|
||||
*/
|
||||
#ifdef CONFIG_SMP
|
||||
#error SMP is not supported on SA1100/SA110
|
||||
#else
|
||||
#define swp_is_buggy
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size)
|
||||
{
|
||||
|
@ -361,8 +369,6 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
|
|||
return ret;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#define arch_align_stack(x) (x)
|
||||
|
|
|
@ -235,7 +235,7 @@ extern struct cpu_tlb_fns cpu_tlb;
|
|||
|
||||
#define tlb_flag(f) ((always_tlb_flags & (f)) || (__tlb_flag & possible_tlb_flags & (f)))
|
||||
|
||||
static inline void flush_tlb_all(void)
|
||||
static inline void local_flush_tlb_all(void)
|
||||
{
|
||||
const int zero = 0;
|
||||
const unsigned int __tlb_flag = __cpu_tlb_flags;
|
||||
|
@ -253,7 +253,7 @@ static inline void flush_tlb_all(void)
|
|||
asm("mcr%? p15, 0, %0, c8, c5, 0" : : "r" (zero));
|
||||
}
|
||||
|
||||
static inline void flush_tlb_mm(struct mm_struct *mm)
|
||||
static inline void local_flush_tlb_mm(struct mm_struct *mm)
|
||||
{
|
||||
const int zero = 0;
|
||||
const int asid = ASID(mm);
|
||||
|
@ -282,7 +282,7 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
|
|||
}
|
||||
|
||||
static inline void
|
||||
flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
|
||||
local_flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
|
||||
{
|
||||
const int zero = 0;
|
||||
const unsigned int __tlb_flag = __cpu_tlb_flags;
|
||||
|
@ -313,7 +313,7 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
|
|||
asm("mcr%? p15, 0, %0, c8, c5, 1" : : "r" (uaddr));
|
||||
}
|
||||
|
||||
static inline void flush_tlb_kernel_page(unsigned long kaddr)
|
||||
static inline void local_flush_tlb_kernel_page(unsigned long kaddr)
|
||||
{
|
||||
const int zero = 0;
|
||||
const unsigned int __tlb_flag = __cpu_tlb_flags;
|
||||
|
@ -384,8 +384,24 @@ static inline void clean_pmd_entry(pmd_t *pmd)
|
|||
/*
|
||||
* Convert calls to our calling convention.
|
||||
*/
|
||||
#define flush_tlb_range(vma,start,end) __cpu_flush_user_tlb_range(start,end,vma)
|
||||
#define flush_tlb_kernel_range(s,e) __cpu_flush_kern_tlb_range(s,e)
|
||||
#define local_flush_tlb_range(vma,start,end) __cpu_flush_user_tlb_range(start,end,vma)
|
||||
#define local_flush_tlb_kernel_range(s,e) __cpu_flush_kern_tlb_range(s,e)
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
#define flush_tlb_all local_flush_tlb_all
|
||||
#define flush_tlb_mm local_flush_tlb_mm
|
||||
#define flush_tlb_page local_flush_tlb_page
|
||||
#define flush_tlb_kernel_page local_flush_tlb_kernel_page
|
||||
#define flush_tlb_range local_flush_tlb_range
|
||||
#define flush_tlb_kernel_range local_flush_tlb_kernel_range
|
||||
#else
|
||||
extern void flush_tlb_all(void);
|
||||
extern void flush_tlb_mm(struct mm_struct *mm);
|
||||
extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr);
|
||||
extern void flush_tlb_kernel_page(unsigned long kaddr);
|
||||
extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end);
|
||||
extern void flush_tlb_kernel_range(unsigned long start, unsigned long end);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* if PG_dcache_dirty is set for the page, we need to ensure that any
|
||||
|
|
|
@ -30,34 +30,16 @@
|
|||
#if defined(CONFIG_ARCH_A5K)
|
||||
/* UART CLK PORT IRQ FLAGS */
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
{ 0, BASE_BAUD, 0x3F8, 10, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0x2F8, 10, STD_COM_FLAGS }, /* ttyS1 */
|
||||
|
||||
#else
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS1 */
|
||||
|
||||
#endif
|
||||
|
||||
#define EXTRA_SERIAL_PORT_DEFNS \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS2 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS3 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS4 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS5 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS6 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS7 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS8 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS9 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS10 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS11 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS12 */ \
|
||||
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS13 */
|
||||
|
||||
#define SERIAL_PORT_DFNS \
|
||||
STD_SERIAL_PORT_DEFNS \
|
||||
EXTRA_SERIAL_PORT_DEFNS
|
||||
|
||||
#endif
|
||||
|
|
|
@ -22,109 +22,9 @@
|
|||
#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define FOURPORT_FLAGS ASYNC_FOURPORT
|
||||
#define ACCENT_FLAGS 0
|
||||
#define BOCA_FLAGS 0
|
||||
#define HUB6_FLAGS 0
|
||||
#endif
|
||||
|
||||
#define MCA_COM_FLAGS (STD_COM_FLAGS|ASYNC_BOOT_ONLYMCA)
|
||||
|
||||
/*
|
||||
* The following define the access methods for the HUB6 card. All
|
||||
* access is through two ports for all 24 possible chips. The card is
|
||||
* selected through the high 2 bits, the port on that card with the
|
||||
* "middle" 3 bits, and the register on that port with the bottom
|
||||
* 3 bits.
|
||||
*
|
||||
* While the access port and interrupt is configurable, the default
|
||||
* port locations are 0x302 for the port control register, and 0x303
|
||||
* for the data read/write register. Normally, the interrupt is at irq3
|
||||
* but can be anything from 3 to 7 inclusive. Note that using 3 will
|
||||
* require disabling com2.
|
||||
*/
|
||||
|
||||
#define C_P(card,port) (((card)<<6|(port)<<3) + 1)
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \
|
||||
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \
|
||||
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
|
||||
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define EXTRA_SERIAL_PORT_DEFNS \
|
||||
{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, /* ttyS4 */ \
|
||||
{ 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS }, /* ttyS5 */ \
|
||||
{ 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS }, /* ttyS6 */ \
|
||||
{ 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS }, /* ttyS7 */ \
|
||||
{ 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS }, /* ttyS8 */ \
|
||||
{ 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS }, /* ttyS9 */ \
|
||||
{ 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS }, /* ttyS10 */ \
|
||||
{ 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS }, /* ttyS11 */ \
|
||||
{ 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS }, /* ttyS12 */ \
|
||||
{ 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS }, /* ttyS13 */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS14 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS15 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS }, /* ttyS16 */ \
|
||||
{ 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS }, /* ttyS17 */ \
|
||||
{ 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS }, /* ttyS18 */ \
|
||||
{ 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS }, /* ttyS19 */ \
|
||||
{ 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS }, /* ttyS20 */ \
|
||||
{ 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS }, /* ttyS21 */ \
|
||||
{ 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS }, /* ttyS22 */ \
|
||||
{ 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS }, /* ttyS23 */ \
|
||||
{ 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS }, /* ttyS24 */ \
|
||||
{ 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS }, /* ttyS25 */ \
|
||||
{ 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS }, /* ttyS26 */ \
|
||||
{ 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS }, /* ttyS27 */ \
|
||||
{ 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS }, /* ttyS28 */ \
|
||||
{ 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS }, /* ttyS29 */ \
|
||||
{ 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS }, /* ttyS30 */ \
|
||||
{ 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS }, /* ttyS31 */
|
||||
#else
|
||||
#define EXTRA_SERIAL_PORT_DEFNS
|
||||
#endif
|
||||
|
||||
/* You can have up to four HUB6's in the system, but I've only
|
||||
* included two cards here for a total of twelve ports.
|
||||
*/
|
||||
#if (defined(CONFIG_HUB6) && defined(CONFIG_SERIAL_MANY_PORTS))
|
||||
#define HUB6_SERIAL_PORT_DFNS \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,0) }, /* ttyS32 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,1) }, /* ttyS33 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,2) }, /* ttyS34 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,3) }, /* ttyS35 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,4) }, /* ttyS36 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,5) }, /* ttyS37 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,0) }, /* ttyS38 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,1) }, /* ttyS39 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,2) }, /* ttyS40 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,3) }, /* ttyS41 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,4) }, /* ttyS42 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,5) }, /* ttyS43 */
|
||||
#else
|
||||
#define HUB6_SERIAL_PORT_DFNS
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MCA
|
||||
#define MCA_SERIAL_PORT_DFNS \
|
||||
{ 0, BASE_BAUD, 0x3220, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x3228, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x4220, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x4228, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x5220, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x5228, 3, MCA_COM_FLAGS },
|
||||
#else
|
||||
#define MCA_SERIAL_PORT_DFNS
|
||||
#endif
|
||||
|
||||
#define SERIAL_PORT_DFNS \
|
||||
STD_SERIAL_PORT_DEFNS \
|
||||
EXTRA_SERIAL_PORT_DEFNS \
|
||||
HUB6_SERIAL_PORT_DFNS \
|
||||
MCA_SERIAL_PORT_DFNS
|
||||
|
||||
|
|
|
@ -132,6 +132,9 @@ reload_context (mm_context_t context)
|
|||
ia64_srlz_i(); /* srlz.i implies srlz.d */
|
||||
}
|
||||
|
||||
/*
|
||||
* Must be called with preemption off
|
||||
*/
|
||||
static inline void
|
||||
activate_context (struct mm_struct *mm)
|
||||
{
|
||||
|
|
|
@ -216,6 +216,10 @@
|
|||
#define TIO_SWIN_WIDGETNUM(x) (((x) >> TIO_SWIN_SIZE_BITS) & TIO_SWIN_WIDGET_MASK)
|
||||
|
||||
|
||||
#define TIO_IOSPACE_ADDR(n,x) \
|
||||
/* Move in the Chiplet ID for TIO Local Block MMR */ \
|
||||
(REMOTE_ADDR(n,x) | 1UL << (NASID_SHIFT - 2))
|
||||
|
||||
/*
|
||||
* The following macros produce the correct base virtual address for
|
||||
* the hub registers. The REMOTE_HUB_* macro produce
|
||||
|
@ -233,13 +237,16 @@
|
|||
#define REMOTE_HUB_ADDR(n,x) \
|
||||
((n & 1) ? \
|
||||
/* TIO: */ \
|
||||
((volatile u64 *)(GLOBAL_MMR_ADDR(n,x))) \
|
||||
: /* SHUB: */ \
|
||||
(((x) & BWIN_TOP) ? ((volatile u64 *)(GLOBAL_MMR_ADDR(n,x)))\
|
||||
(is_shub2() ? \
|
||||
/* TIO on Shub2 */ \
|
||||
(volatile u64 *)(TIO_IOSPACE_ADDR(n,x)) \
|
||||
: /* TIO on shub1 */ \
|
||||
(volatile u64 *)(GLOBAL_MMR_ADDR(n,x))) \
|
||||
\
|
||||
: /* SHUB1 and SHUB2 MMRs: */ \
|
||||
(((x) & BWIN_TOP) ? ((volatile u64 *)(GLOBAL_MMR_ADDR(n,x))) \
|
||||
: ((volatile u64 *)(NODE_SWIN_BASE(n,1) + 0x800000 + (x)))))
|
||||
|
||||
|
||||
|
||||
#define HUB_L(x) (*((volatile typeof(*x) *)x))
|
||||
#define HUB_S(x,d) (*((volatile typeof(*x) *)x) = (d))
|
||||
|
||||
|
|
|
@ -33,5 +33,6 @@
|
|||
#define L1_BRICKTYPE_PA 0x6a /* j */
|
||||
#define L1_BRICKTYPE_IA 0x6b /* k */
|
||||
#define L1_BRICKTYPE_ATHENA 0x2b /* + */
|
||||
#define L1_BRICKTYPE_DAYTONA 0x7a /* z */
|
||||
|
||||
#endif /* _ASM_IA64_SN_L1_H */
|
||||
|
|
|
@ -14,96 +14,98 @@
|
|||
/* Register "SH_IPI_INT" */
|
||||
/* SHub Inter-Processor Interrupt Registers */
|
||||
/* ==================================================================== */
|
||||
#define SH1_IPI_INT 0x0000000110000380
|
||||
#define SH2_IPI_INT 0x0000000010000380
|
||||
#define SH1_IPI_INT __IA64_UL_CONST(0x0000000110000380)
|
||||
#define SH2_IPI_INT __IA64_UL_CONST(0x0000000010000380)
|
||||
|
||||
/* SH_IPI_INT_TYPE */
|
||||
/* Description: Type of Interrupt: 0=INT, 2=PMI, 4=NMI, 5=INIT */
|
||||
#define SH_IPI_INT_TYPE_SHFT 0
|
||||
#define SH_IPI_INT_TYPE_MASK 0x0000000000000007
|
||||
#define SH_IPI_INT_TYPE_MASK __IA64_UL_CONST(0x0000000000000007)
|
||||
|
||||
/* SH_IPI_INT_AGT */
|
||||
/* Description: Agent, must be 0 for SHub */
|
||||
#define SH_IPI_INT_AGT_SHFT 3
|
||||
#define SH_IPI_INT_AGT_MASK 0x0000000000000008
|
||||
#define SH_IPI_INT_AGT_MASK __IA64_UL_CONST(0x0000000000000008)
|
||||
|
||||
/* SH_IPI_INT_PID */
|
||||
/* Description: Processor ID, same setting as on targeted McKinley */
|
||||
#define SH_IPI_INT_PID_SHFT 4
|
||||
#define SH_IPI_INT_PID_MASK 0x00000000000ffff0
|
||||
#define SH_IPI_INT_PID_MASK __IA64_UL_CONST(0x00000000000ffff0)
|
||||
|
||||
/* SH_IPI_INT_BASE */
|
||||
/* Description: Optional interrupt vector area, 2MB aligned */
|
||||
#define SH_IPI_INT_BASE_SHFT 21
|
||||
#define SH_IPI_INT_BASE_MASK 0x0003ffffffe00000
|
||||
#define SH_IPI_INT_BASE_MASK __IA64_UL_CONST(0x0003ffffffe00000)
|
||||
|
||||
/* SH_IPI_INT_IDX */
|
||||
/* Description: Targeted McKinley interrupt vector */
|
||||
#define SH_IPI_INT_IDX_SHFT 52
|
||||
#define SH_IPI_INT_IDX_MASK 0x0ff0000000000000
|
||||
#define SH_IPI_INT_IDX_MASK __IA64_UL_CONST(0x0ff0000000000000)
|
||||
|
||||
/* SH_IPI_INT_SEND */
|
||||
/* Description: Send Interrupt Message to PI, This generates a puls */
|
||||
#define SH_IPI_INT_SEND_SHFT 63
|
||||
#define SH_IPI_INT_SEND_MASK 0x8000000000000000
|
||||
#define SH_IPI_INT_SEND_MASK __IA64_UL_CONST(0x8000000000000000)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_EVENT_OCCURRED" */
|
||||
/* SHub Interrupt Event Occurred */
|
||||
/* ==================================================================== */
|
||||
#define SH1_EVENT_OCCURRED 0x0000000110010000
|
||||
#define SH1_EVENT_OCCURRED_ALIAS 0x0000000110010008
|
||||
#define SH2_EVENT_OCCURRED 0x0000000010010000
|
||||
#define SH2_EVENT_OCCURRED_ALIAS 0x0000000010010008
|
||||
#define SH1_EVENT_OCCURRED __IA64_UL_CONST(0x0000000110010000)
|
||||
#define SH1_EVENT_OCCURRED_ALIAS __IA64_UL_CONST(0x0000000110010008)
|
||||
#define SH2_EVENT_OCCURRED __IA64_UL_CONST(0x0000000010010000)
|
||||
#define SH2_EVENT_OCCURRED_ALIAS __IA64_UL_CONST(0x0000000010010008)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_PI_CAM_CONTROL" */
|
||||
/* CRB CAM MMR Access Control */
|
||||
/* ==================================================================== */
|
||||
#define SH1_PI_CAM_CONTROL 0x0000000120050300
|
||||
#define SH1_PI_CAM_CONTROL __IA64_UL_CONST(0x0000000120050300)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_SHUB_ID" */
|
||||
/* SHub ID Number */
|
||||
/* ==================================================================== */
|
||||
#define SH1_SHUB_ID 0x0000000110060580
|
||||
#define SH1_SHUB_ID __IA64_UL_CONST(0x0000000110060580)
|
||||
#define SH1_SHUB_ID_REVISION_SHFT 28
|
||||
#define SH1_SHUB_ID_REVISION_MASK 0x00000000f0000000
|
||||
#define SH1_SHUB_ID_REVISION_MASK __IA64_UL_CONST(0x00000000f0000000)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_RTC" */
|
||||
/* Real-time Clock */
|
||||
/* ==================================================================== */
|
||||
#define SH1_RTC 0x00000001101c0000
|
||||
#define SH2_RTC 0x00000002101c0000
|
||||
#define SH_RTC_MASK 0x007fffffffffffff
|
||||
#define SH1_RTC __IA64_UL_CONST(0x00000001101c0000)
|
||||
#define SH2_RTC __IA64_UL_CONST(0x00000002101c0000)
|
||||
#define SH_RTC_MASK __IA64_UL_CONST(0x007fffffffffffff)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_PIO_WRITE_STATUS_0|1" */
|
||||
/* PIO Write Status for CPU 0 & 1 */
|
||||
/* ==================================================================== */
|
||||
#define SH1_PIO_WRITE_STATUS_0 0x0000000120070200
|
||||
#define SH1_PIO_WRITE_STATUS_1 0x0000000120070280
|
||||
#define SH2_PIO_WRITE_STATUS_0 0x0000000020070200
|
||||
#define SH2_PIO_WRITE_STATUS_1 0x0000000020070280
|
||||
#define SH2_PIO_WRITE_STATUS_2 0x0000000020070300
|
||||
#define SH2_PIO_WRITE_STATUS_3 0x0000000020070380
|
||||
#define SH1_PIO_WRITE_STATUS_0 __IA64_UL_CONST(0x0000000120070200)
|
||||
#define SH1_PIO_WRITE_STATUS_1 __IA64_UL_CONST(0x0000000120070280)
|
||||
#define SH2_PIO_WRITE_STATUS_0 __IA64_UL_CONST(0x0000000020070200)
|
||||
#define SH2_PIO_WRITE_STATUS_1 __IA64_UL_CONST(0x0000000020070280)
|
||||
#define SH2_PIO_WRITE_STATUS_2 __IA64_UL_CONST(0x0000000020070300)
|
||||
#define SH2_PIO_WRITE_STATUS_3 __IA64_UL_CONST(0x0000000020070380)
|
||||
|
||||
/* SH_PIO_WRITE_STATUS_0_WRITE_DEADLOCK */
|
||||
/* Description: Deadlock response detected */
|
||||
#define SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_SHFT 1
|
||||
#define SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK 0x0000000000000002
|
||||
#define SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK \
|
||||
__IA64_UL_CONST(0x0000000000000002)
|
||||
|
||||
/* SH_PIO_WRITE_STATUS_0_PENDING_WRITE_COUNT */
|
||||
/* Description: Count of currently pending PIO writes */
|
||||
#define SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_SHFT 56
|
||||
#define SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_MASK 0x3f00000000000000
|
||||
#define SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_MASK \
|
||||
__IA64_UL_CONST(0x3f00000000000000)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_PIO_WRITE_STATUS_0_ALIAS" */
|
||||
/* ==================================================================== */
|
||||
#define SH1_PIO_WRITE_STATUS_0_ALIAS 0x0000000120070208
|
||||
#define SH2_PIO_WRITE_STATUS_0_ALIAS 0x0000000020070208
|
||||
#define SH1_PIO_WRITE_STATUS_0_ALIAS __IA64_UL_CONST(0x0000000120070208)
|
||||
#define SH2_PIO_WRITE_STATUS_0_ALIAS __IA64_UL_CONST(0x0000000020070208)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_EVENT_OCCURRED" */
|
||||
|
@ -112,32 +114,32 @@
|
|||
/* SH_EVENT_OCCURRED_UART_INT */
|
||||
/* Description: Pending Junk Bus UART Interrupt */
|
||||
#define SH_EVENT_OCCURRED_UART_INT_SHFT 20
|
||||
#define SH_EVENT_OCCURRED_UART_INT_MASK 0x0000000000100000
|
||||
#define SH_EVENT_OCCURRED_UART_INT_MASK __IA64_UL_CONST(0x0000000000100000)
|
||||
|
||||
/* SH_EVENT_OCCURRED_IPI_INT */
|
||||
/* Description: Pending IPI Interrupt */
|
||||
#define SH_EVENT_OCCURRED_IPI_INT_SHFT 28
|
||||
#define SH_EVENT_OCCURRED_IPI_INT_MASK 0x0000000010000000
|
||||
#define SH_EVENT_OCCURRED_IPI_INT_MASK __IA64_UL_CONST(0x0000000010000000)
|
||||
|
||||
/* SH_EVENT_OCCURRED_II_INT0 */
|
||||
/* Description: Pending II 0 Interrupt */
|
||||
#define SH_EVENT_OCCURRED_II_INT0_SHFT 29
|
||||
#define SH_EVENT_OCCURRED_II_INT0_MASK 0x0000000020000000
|
||||
#define SH_EVENT_OCCURRED_II_INT0_MASK __IA64_UL_CONST(0x0000000020000000)
|
||||
|
||||
/* SH_EVENT_OCCURRED_II_INT1 */
|
||||
/* Description: Pending II 1 Interrupt */
|
||||
#define SH_EVENT_OCCURRED_II_INT1_SHFT 30
|
||||
#define SH_EVENT_OCCURRED_II_INT1_MASK 0x0000000040000000
|
||||
#define SH_EVENT_OCCURRED_II_INT1_MASK __IA64_UL_CONST(0x0000000040000000)
|
||||
|
||||
/* SH2_EVENT_OCCURRED_EXTIO_INT2 */
|
||||
/* Description: Pending SHUB 2 EXT IO INT2 */
|
||||
#define SH2_EVENT_OCCURRED_EXTIO_INT2_SHFT 33
|
||||
#define SH2_EVENT_OCCURRED_EXTIO_INT2_MASK 0x0000000200000000
|
||||
#define SH2_EVENT_OCCURRED_EXTIO_INT2_MASK __IA64_UL_CONST(0x0000000200000000)
|
||||
|
||||
/* SH2_EVENT_OCCURRED_EXTIO_INT3 */
|
||||
/* Description: Pending SHUB 2 EXT IO INT3 */
|
||||
#define SH2_EVENT_OCCURRED_EXTIO_INT3_SHFT 34
|
||||
#define SH2_EVENT_OCCURRED_EXTIO_INT3_MASK 0x0000000400000000
|
||||
#define SH2_EVENT_OCCURRED_EXTIO_INT3_MASK __IA64_UL_CONST(0x0000000400000000)
|
||||
|
||||
#define SH_ALL_INT_MASK \
|
||||
(SH_EVENT_OCCURRED_UART_INT_MASK | SH_EVENT_OCCURRED_IPI_INT_MASK | \
|
||||
|
@ -163,7 +165,7 @@
|
|||
/* Register "SH1_PTC_0" */
|
||||
/* Puge Translation Cache Message Configuration Information */
|
||||
/* ==================================================================== */
|
||||
#define SH1_PTC_0 0x00000001101a0000
|
||||
#define SH1_PTC_0 __IA64_UL_CONST(0x00000001101a0000)
|
||||
|
||||
/* SH1_PTC_0_A */
|
||||
/* Description: Type */
|
||||
|
@ -185,18 +187,17 @@
|
|||
/* Register "SH1_PTC_1" */
|
||||
/* Puge Translation Cache Message Configuration Information */
|
||||
/* ==================================================================== */
|
||||
#define SH1_PTC_1 0x00000001101a0080
|
||||
#define SH1_PTC_1 __IA64_UL_CONST(0x00000001101a0080)
|
||||
|
||||
/* SH1_PTC_1_START */
|
||||
/* Description: PTC_1 Start */
|
||||
#define SH1_PTC_1_START_SHFT 63
|
||||
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH2_PTC" */
|
||||
/* Puge Translation Cache Message Configuration Information */
|
||||
/* ==================================================================== */
|
||||
#define SH2_PTC 0x0000000170000000
|
||||
#define SH2_PTC __IA64_UL_CONST(0x0000000170000000)
|
||||
|
||||
/* SH2_PTC_A */
|
||||
/* Description: Type */
|
||||
|
@ -217,242 +218,243 @@
|
|||
/* SH2_PTC_ADDR_RID */
|
||||
/* Description: Region ID */
|
||||
#define SH2_PTC_ADDR_SHFT 4
|
||||
#define SH2_PTC_ADDR_MASK 0x1ffffffffffff000
|
||||
#define SH2_PTC_ADDR_MASK __IA64_UL_CONST(0x1ffffffffffff000)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_RTC1_INT_CONFIG" */
|
||||
/* SHub RTC 1 Interrupt Config Registers */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_RTC1_INT_CONFIG 0x0000000110001480
|
||||
#define SH2_RTC1_INT_CONFIG 0x0000000010001480
|
||||
#define SH_RTC1_INT_CONFIG_MASK 0x0ff3ffffffefffff
|
||||
#define SH_RTC1_INT_CONFIG_INIT 0x0000000000000000
|
||||
#define SH1_RTC1_INT_CONFIG __IA64_UL_CONST(0x0000000110001480)
|
||||
#define SH2_RTC1_INT_CONFIG __IA64_UL_CONST(0x0000000010001480)
|
||||
#define SH_RTC1_INT_CONFIG_MASK __IA64_UL_CONST(0x0ff3ffffffefffff)
|
||||
#define SH_RTC1_INT_CONFIG_INIT __IA64_UL_CONST(0x0000000000000000)
|
||||
|
||||
/* SH_RTC1_INT_CONFIG_TYPE */
|
||||
/* Description: Type of Interrupt: 0=INT, 2=PMI, 4=NMI, 5=INIT */
|
||||
#define SH_RTC1_INT_CONFIG_TYPE_SHFT 0
|
||||
#define SH_RTC1_INT_CONFIG_TYPE_MASK 0x0000000000000007
|
||||
#define SH_RTC1_INT_CONFIG_TYPE_MASK __IA64_UL_CONST(0x0000000000000007)
|
||||
|
||||
/* SH_RTC1_INT_CONFIG_AGT */
|
||||
/* Description: Agent, must be 0 for SHub */
|
||||
#define SH_RTC1_INT_CONFIG_AGT_SHFT 3
|
||||
#define SH_RTC1_INT_CONFIG_AGT_MASK 0x0000000000000008
|
||||
#define SH_RTC1_INT_CONFIG_AGT_MASK __IA64_UL_CONST(0x0000000000000008)
|
||||
|
||||
/* SH_RTC1_INT_CONFIG_PID */
|
||||
/* Description: Processor ID, same setting as on targeted McKinley */
|
||||
#define SH_RTC1_INT_CONFIG_PID_SHFT 4
|
||||
#define SH_RTC1_INT_CONFIG_PID_MASK 0x00000000000ffff0
|
||||
#define SH_RTC1_INT_CONFIG_PID_MASK __IA64_UL_CONST(0x00000000000ffff0)
|
||||
|
||||
/* SH_RTC1_INT_CONFIG_BASE */
|
||||
/* Description: Optional interrupt vector area, 2MB aligned */
|
||||
#define SH_RTC1_INT_CONFIG_BASE_SHFT 21
|
||||
#define SH_RTC1_INT_CONFIG_BASE_MASK 0x0003ffffffe00000
|
||||
#define SH_RTC1_INT_CONFIG_BASE_MASK __IA64_UL_CONST(0x0003ffffffe00000)
|
||||
|
||||
/* SH_RTC1_INT_CONFIG_IDX */
|
||||
/* Description: Targeted McKinley interrupt vector */
|
||||
#define SH_RTC1_INT_CONFIG_IDX_SHFT 52
|
||||
#define SH_RTC1_INT_CONFIG_IDX_MASK 0x0ff0000000000000
|
||||
#define SH_RTC1_INT_CONFIG_IDX_MASK __IA64_UL_CONST(0x0ff0000000000000)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_RTC1_INT_ENABLE" */
|
||||
/* SHub RTC 1 Interrupt Enable Registers */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_RTC1_INT_ENABLE 0x0000000110001500
|
||||
#define SH2_RTC1_INT_ENABLE 0x0000000010001500
|
||||
#define SH_RTC1_INT_ENABLE_MASK 0x0000000000000001
|
||||
#define SH_RTC1_INT_ENABLE_INIT 0x0000000000000000
|
||||
#define SH1_RTC1_INT_ENABLE __IA64_UL_CONST(0x0000000110001500)
|
||||
#define SH2_RTC1_INT_ENABLE __IA64_UL_CONST(0x0000000010001500)
|
||||
#define SH_RTC1_INT_ENABLE_MASK __IA64_UL_CONST(0x0000000000000001)
|
||||
#define SH_RTC1_INT_ENABLE_INIT __IA64_UL_CONST(0x0000000000000000)
|
||||
|
||||
/* SH_RTC1_INT_ENABLE_RTC1_ENABLE */
|
||||
/* Description: Enable RTC 1 Interrupt */
|
||||
#define SH_RTC1_INT_ENABLE_RTC1_ENABLE_SHFT 0
|
||||
#define SH_RTC1_INT_ENABLE_RTC1_ENABLE_MASK 0x0000000000000001
|
||||
#define SH_RTC1_INT_ENABLE_RTC1_ENABLE_MASK \
|
||||
__IA64_UL_CONST(0x0000000000000001)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_RTC2_INT_CONFIG" */
|
||||
/* SHub RTC 2 Interrupt Config Registers */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_RTC2_INT_CONFIG 0x0000000110001580
|
||||
#define SH2_RTC2_INT_CONFIG 0x0000000010001580
|
||||
#define SH_RTC2_INT_CONFIG_MASK 0x0ff3ffffffefffff
|
||||
#define SH_RTC2_INT_CONFIG_INIT 0x0000000000000000
|
||||
#define SH1_RTC2_INT_CONFIG __IA64_UL_CONST(0x0000000110001580)
|
||||
#define SH2_RTC2_INT_CONFIG __IA64_UL_CONST(0x0000000010001580)
|
||||
#define SH_RTC2_INT_CONFIG_MASK __IA64_UL_CONST(0x0ff3ffffffefffff)
|
||||
#define SH_RTC2_INT_CONFIG_INIT __IA64_UL_CONST(0x0000000000000000)
|
||||
|
||||
/* SH_RTC2_INT_CONFIG_TYPE */
|
||||
/* Description: Type of Interrupt: 0=INT, 2=PMI, 4=NMI, 5=INIT */
|
||||
#define SH_RTC2_INT_CONFIG_TYPE_SHFT 0
|
||||
#define SH_RTC2_INT_CONFIG_TYPE_MASK 0x0000000000000007
|
||||
#define SH_RTC2_INT_CONFIG_TYPE_MASK __IA64_UL_CONST(0x0000000000000007)
|
||||
|
||||
/* SH_RTC2_INT_CONFIG_AGT */
|
||||
/* Description: Agent, must be 0 for SHub */
|
||||
#define SH_RTC2_INT_CONFIG_AGT_SHFT 3
|
||||
#define SH_RTC2_INT_CONFIG_AGT_MASK 0x0000000000000008
|
||||
#define SH_RTC2_INT_CONFIG_AGT_MASK __IA64_UL_CONST(0x0000000000000008)
|
||||
|
||||
/* SH_RTC2_INT_CONFIG_PID */
|
||||
/* Description: Processor ID, same setting as on targeted McKinley */
|
||||
#define SH_RTC2_INT_CONFIG_PID_SHFT 4
|
||||
#define SH_RTC2_INT_CONFIG_PID_MASK 0x00000000000ffff0
|
||||
#define SH_RTC2_INT_CONFIG_PID_MASK __IA64_UL_CONST(0x00000000000ffff0)
|
||||
|
||||
/* SH_RTC2_INT_CONFIG_BASE */
|
||||
/* Description: Optional interrupt vector area, 2MB aligned */
|
||||
#define SH_RTC2_INT_CONFIG_BASE_SHFT 21
|
||||
#define SH_RTC2_INT_CONFIG_BASE_MASK 0x0003ffffffe00000
|
||||
#define SH_RTC2_INT_CONFIG_BASE_MASK __IA64_UL_CONST(0x0003ffffffe00000)
|
||||
|
||||
/* SH_RTC2_INT_CONFIG_IDX */
|
||||
/* Description: Targeted McKinley interrupt vector */
|
||||
#define SH_RTC2_INT_CONFIG_IDX_SHFT 52
|
||||
#define SH_RTC2_INT_CONFIG_IDX_MASK 0x0ff0000000000000
|
||||
#define SH_RTC2_INT_CONFIG_IDX_MASK __IA64_UL_CONST(0x0ff0000000000000)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_RTC2_INT_ENABLE" */
|
||||
/* SHub RTC 2 Interrupt Enable Registers */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_RTC2_INT_ENABLE 0x0000000110001600
|
||||
#define SH2_RTC2_INT_ENABLE 0x0000000010001600
|
||||
#define SH_RTC2_INT_ENABLE_MASK 0x0000000000000001
|
||||
#define SH_RTC2_INT_ENABLE_INIT 0x0000000000000000
|
||||
#define SH1_RTC2_INT_ENABLE __IA64_UL_CONST(0x0000000110001600)
|
||||
#define SH2_RTC2_INT_ENABLE __IA64_UL_CONST(0x0000000010001600)
|
||||
#define SH_RTC2_INT_ENABLE_MASK __IA64_UL_CONST(0x0000000000000001)
|
||||
#define SH_RTC2_INT_ENABLE_INIT __IA64_UL_CONST(0x0000000000000000)
|
||||
|
||||
/* SH_RTC2_INT_ENABLE_RTC2_ENABLE */
|
||||
/* Description: Enable RTC 2 Interrupt */
|
||||
#define SH_RTC2_INT_ENABLE_RTC2_ENABLE_SHFT 0
|
||||
#define SH_RTC2_INT_ENABLE_RTC2_ENABLE_MASK 0x0000000000000001
|
||||
#define SH_RTC2_INT_ENABLE_RTC2_ENABLE_MASK \
|
||||
__IA64_UL_CONST(0x0000000000000001)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_RTC3_INT_CONFIG" */
|
||||
/* SHub RTC 3 Interrupt Config Registers */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_RTC3_INT_CONFIG 0x0000000110001680
|
||||
#define SH2_RTC3_INT_CONFIG 0x0000000010001680
|
||||
#define SH_RTC3_INT_CONFIG_MASK 0x0ff3ffffffefffff
|
||||
#define SH_RTC3_INT_CONFIG_INIT 0x0000000000000000
|
||||
#define SH1_RTC3_INT_CONFIG __IA64_UL_CONST(0x0000000110001680)
|
||||
#define SH2_RTC3_INT_CONFIG __IA64_UL_CONST(0x0000000010001680)
|
||||
#define SH_RTC3_INT_CONFIG_MASK __IA64_UL_CONST(0x0ff3ffffffefffff)
|
||||
#define SH_RTC3_INT_CONFIG_INIT __IA64_UL_CONST(0x0000000000000000)
|
||||
|
||||
/* SH_RTC3_INT_CONFIG_TYPE */
|
||||
/* Description: Type of Interrupt: 0=INT, 2=PMI, 4=NMI, 5=INIT */
|
||||
#define SH_RTC3_INT_CONFIG_TYPE_SHFT 0
|
||||
#define SH_RTC3_INT_CONFIG_TYPE_MASK 0x0000000000000007
|
||||
#define SH_RTC3_INT_CONFIG_TYPE_MASK __IA64_UL_CONST(0x0000000000000007)
|
||||
|
||||
/* SH_RTC3_INT_CONFIG_AGT */
|
||||
/* Description: Agent, must be 0 for SHub */
|
||||
#define SH_RTC3_INT_CONFIG_AGT_SHFT 3
|
||||
#define SH_RTC3_INT_CONFIG_AGT_MASK 0x0000000000000008
|
||||
#define SH_RTC3_INT_CONFIG_AGT_MASK __IA64_UL_CONST(0x0000000000000008)
|
||||
|
||||
/* SH_RTC3_INT_CONFIG_PID */
|
||||
/* Description: Processor ID, same setting as on targeted McKinley */
|
||||
#define SH_RTC3_INT_CONFIG_PID_SHFT 4
|
||||
#define SH_RTC3_INT_CONFIG_PID_MASK 0x00000000000ffff0
|
||||
#define SH_RTC3_INT_CONFIG_PID_MASK __IA64_UL_CONST(0x00000000000ffff0)
|
||||
|
||||
/* SH_RTC3_INT_CONFIG_BASE */
|
||||
/* Description: Optional interrupt vector area, 2MB aligned */
|
||||
#define SH_RTC3_INT_CONFIG_BASE_SHFT 21
|
||||
#define SH_RTC3_INT_CONFIG_BASE_MASK 0x0003ffffffe00000
|
||||
#define SH_RTC3_INT_CONFIG_BASE_MASK __IA64_UL_CONST(0x0003ffffffe00000)
|
||||
|
||||
/* SH_RTC3_INT_CONFIG_IDX */
|
||||
/* Description: Targeted McKinley interrupt vector */
|
||||
#define SH_RTC3_INT_CONFIG_IDX_SHFT 52
|
||||
#define SH_RTC3_INT_CONFIG_IDX_MASK 0x0ff0000000000000
|
||||
#define SH_RTC3_INT_CONFIG_IDX_MASK __IA64_UL_CONST(0x0ff0000000000000)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_RTC3_INT_ENABLE" */
|
||||
/* SHub RTC 3 Interrupt Enable Registers */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_RTC3_INT_ENABLE 0x0000000110001700
|
||||
#define SH2_RTC3_INT_ENABLE 0x0000000010001700
|
||||
#define SH_RTC3_INT_ENABLE_MASK 0x0000000000000001
|
||||
#define SH_RTC3_INT_ENABLE_INIT 0x0000000000000000
|
||||
#define SH1_RTC3_INT_ENABLE __IA64_UL_CONST(0x0000000110001700)
|
||||
#define SH2_RTC3_INT_ENABLE __IA64_UL_CONST(0x0000000010001700)
|
||||
#define SH_RTC3_INT_ENABLE_MASK __IA64_UL_CONST(0x0000000000000001)
|
||||
#define SH_RTC3_INT_ENABLE_INIT __IA64_UL_CONST(0x0000000000000000)
|
||||
|
||||
/* SH_RTC3_INT_ENABLE_RTC3_ENABLE */
|
||||
/* Description: Enable RTC 3 Interrupt */
|
||||
#define SH_RTC3_INT_ENABLE_RTC3_ENABLE_SHFT 0
|
||||
#define SH_RTC3_INT_ENABLE_RTC3_ENABLE_MASK 0x0000000000000001
|
||||
#define SH_RTC3_INT_ENABLE_RTC3_ENABLE_MASK \
|
||||
__IA64_UL_CONST(0x0000000000000001)
|
||||
|
||||
/* SH_EVENT_OCCURRED_RTC1_INT */
|
||||
/* Description: Pending RTC 1 Interrupt */
|
||||
#define SH_EVENT_OCCURRED_RTC1_INT_SHFT 24
|
||||
#define SH_EVENT_OCCURRED_RTC1_INT_MASK 0x0000000001000000
|
||||
#define SH_EVENT_OCCURRED_RTC1_INT_MASK __IA64_UL_CONST(0x0000000001000000)
|
||||
|
||||
/* SH_EVENT_OCCURRED_RTC2_INT */
|
||||
/* Description: Pending RTC 2 Interrupt */
|
||||
#define SH_EVENT_OCCURRED_RTC2_INT_SHFT 25
|
||||
#define SH_EVENT_OCCURRED_RTC2_INT_MASK 0x0000000002000000
|
||||
#define SH_EVENT_OCCURRED_RTC2_INT_MASK __IA64_UL_CONST(0x0000000002000000)
|
||||
|
||||
/* SH_EVENT_OCCURRED_RTC3_INT */
|
||||
/* Description: Pending RTC 3 Interrupt */
|
||||
#define SH_EVENT_OCCURRED_RTC3_INT_SHFT 26
|
||||
#define SH_EVENT_OCCURRED_RTC3_INT_MASK 0x0000000004000000
|
||||
#define SH_EVENT_OCCURRED_RTC3_INT_MASK __IA64_UL_CONST(0x0000000004000000)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_IPI_ACCESS" */
|
||||
/* CPU interrupt Access Permission Bits */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_IPI_ACCESS 0x0000000110060480
|
||||
#define SH2_IPI_ACCESS0 0x0000000010060c00
|
||||
#define SH2_IPI_ACCESS1 0x0000000010060c80
|
||||
#define SH2_IPI_ACCESS2 0x0000000010060d00
|
||||
#define SH2_IPI_ACCESS3 0x0000000010060d80
|
||||
#define SH1_IPI_ACCESS __IA64_UL_CONST(0x0000000110060480)
|
||||
#define SH2_IPI_ACCESS0 __IA64_UL_CONST(0x0000000010060c00)
|
||||
#define SH2_IPI_ACCESS1 __IA64_UL_CONST(0x0000000010060c80)
|
||||
#define SH2_IPI_ACCESS2 __IA64_UL_CONST(0x0000000010060d00)
|
||||
#define SH2_IPI_ACCESS3 __IA64_UL_CONST(0x0000000010060d80)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_INT_CMPB" */
|
||||
/* RTC Compare Value for Processor B */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_INT_CMPB 0x00000001101b0080
|
||||
#define SH2_INT_CMPB 0x00000000101b0080
|
||||
#define SH_INT_CMPB_MASK 0x007fffffffffffff
|
||||
#define SH_INT_CMPB_INIT 0x0000000000000000
|
||||
#define SH1_INT_CMPB __IA64_UL_CONST(0x00000001101b0080)
|
||||
#define SH2_INT_CMPB __IA64_UL_CONST(0x00000000101b0080)
|
||||
#define SH_INT_CMPB_MASK __IA64_UL_CONST(0x007fffffffffffff)
|
||||
#define SH_INT_CMPB_INIT __IA64_UL_CONST(0x0000000000000000)
|
||||
|
||||
/* SH_INT_CMPB_REAL_TIME_CMPB */
|
||||
/* Description: Real Time Clock Compare */
|
||||
#define SH_INT_CMPB_REAL_TIME_CMPB_SHFT 0
|
||||
#define SH_INT_CMPB_REAL_TIME_CMPB_MASK 0x007fffffffffffff
|
||||
#define SH_INT_CMPB_REAL_TIME_CMPB_MASK __IA64_UL_CONST(0x007fffffffffffff)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_INT_CMPC" */
|
||||
/* RTC Compare Value for Processor C */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_INT_CMPC 0x00000001101b0100
|
||||
#define SH2_INT_CMPC 0x00000000101b0100
|
||||
#define SH_INT_CMPC_MASK 0x007fffffffffffff
|
||||
#define SH_INT_CMPC_INIT 0x0000000000000000
|
||||
#define SH1_INT_CMPC __IA64_UL_CONST(0x00000001101b0100)
|
||||
#define SH2_INT_CMPC __IA64_UL_CONST(0x00000000101b0100)
|
||||
#define SH_INT_CMPC_MASK __IA64_UL_CONST(0x007fffffffffffff)
|
||||
#define SH_INT_CMPC_INIT __IA64_UL_CONST(0x0000000000000000)
|
||||
|
||||
/* SH_INT_CMPC_REAL_TIME_CMPC */
|
||||
/* Description: Real Time Clock Compare */
|
||||
#define SH_INT_CMPC_REAL_TIME_CMPC_SHFT 0
|
||||
#define SH_INT_CMPC_REAL_TIME_CMPC_MASK 0x007fffffffffffff
|
||||
#define SH_INT_CMPC_REAL_TIME_CMPC_MASK __IA64_UL_CONST(0x007fffffffffffff)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_INT_CMPD" */
|
||||
/* RTC Compare Value for Processor D */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_INT_CMPD 0x00000001101b0180
|
||||
#define SH2_INT_CMPD 0x00000000101b0180
|
||||
#define SH_INT_CMPD_MASK 0x007fffffffffffff
|
||||
#define SH_INT_CMPD_INIT 0x0000000000000000
|
||||
#define SH1_INT_CMPD __IA64_UL_CONST(0x00000001101b0180)
|
||||
#define SH2_INT_CMPD __IA64_UL_CONST(0x00000000101b0180)
|
||||
#define SH_INT_CMPD_MASK __IA64_UL_CONST(0x007fffffffffffff)
|
||||
#define SH_INT_CMPD_INIT __IA64_UL_CONST(0x0000000000000000)
|
||||
|
||||
/* SH_INT_CMPD_REAL_TIME_CMPD */
|
||||
/* Description: Real Time Clock Compare */
|
||||
#define SH_INT_CMPD_REAL_TIME_CMPD_SHFT 0
|
||||
#define SH_INT_CMPD_REAL_TIME_CMPD_MASK 0x007fffffffffffff
|
||||
#define SH_INT_CMPD_REAL_TIME_CMPD_MASK __IA64_UL_CONST(0x007fffffffffffff)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_MD_DQLP_MMR_DIR_PRIVEC0" */
|
||||
/* privilege vector for acc=0 */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_MD_DQLP_MMR_DIR_PRIVEC0 0x0000000100030300
|
||||
#define SH1_MD_DQLP_MMR_DIR_PRIVEC0 __IA64_UL_CONST(0x0000000100030300)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Register "SH_MD_DQRP_MMR_DIR_PRIVEC0" */
|
||||
/* privilege vector for acc=0 */
|
||||
/* ==================================================================== */
|
||||
|
||||
#define SH1_MD_DQRP_MMR_DIR_PRIVEC0 0x0000000100050300
|
||||
#define SH1_MD_DQRP_MMR_DIR_PRIVEC0 __IA64_UL_CONST(0x0000000100050300)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* Some MMRs are functionally identical (or close enough) on both SHUB1 */
|
||||
|
@ -484,17 +486,17 @@
|
|||
/* Engine 0 Control and Status Register */
|
||||
/* ========================================================================== */
|
||||
|
||||
#define SH2_BT_ENG_CSR_0 0x0000000030040000
|
||||
#define SH2_BT_ENG_SRC_ADDR_0 0x0000000030040080
|
||||
#define SH2_BT_ENG_DEST_ADDR_0 0x0000000030040100
|
||||
#define SH2_BT_ENG_NOTIF_ADDR_0 0x0000000030040180
|
||||
#define SH2_BT_ENG_CSR_0 __IA64_UL_CONST(0x0000000030040000)
|
||||
#define SH2_BT_ENG_SRC_ADDR_0 __IA64_UL_CONST(0x0000000030040080)
|
||||
#define SH2_BT_ENG_DEST_ADDR_0 __IA64_UL_CONST(0x0000000030040100)
|
||||
#define SH2_BT_ENG_NOTIF_ADDR_0 __IA64_UL_CONST(0x0000000030040180)
|
||||
|
||||
/* ========================================================================== */
|
||||
/* BTE interfaces 1-3 */
|
||||
/* ========================================================================== */
|
||||
|
||||
#define SH2_BT_ENG_CSR_1 0x0000000030050000
|
||||
#define SH2_BT_ENG_CSR_2 0x0000000030060000
|
||||
#define SH2_BT_ENG_CSR_3 0x0000000030070000
|
||||
#define SH2_BT_ENG_CSR_1 __IA64_UL_CONST(0x0000000030050000)
|
||||
#define SH2_BT_ENG_CSR_2 __IA64_UL_CONST(0x0000000030060000)
|
||||
#define SH2_BT_ENG_CSR_3 __IA64_UL_CONST(0x0000000030070000)
|
||||
|
||||
#endif /* _ASM_IA64_SN_SHUB_MMR_H */
|
||||
|
|
|
@ -10,16 +10,17 @@
|
|||
|
||||
#include <linux/config.h>
|
||||
|
||||
#ifdef CONFIG_IA64_SGI_SN_SIM
|
||||
|
||||
#define SNMAGIC 0xaeeeeeee8badbeefL
|
||||
#define IS_RUNNING_ON_SIMULATOR() ({long sn; asm("mov %0=cpuid[%1]" : "=r"(sn) : "r"(2)); sn == SNMAGIC;})
|
||||
#define IS_MEDUSA() ({long sn; asm("mov %0=cpuid[%1]" : "=r"(sn) : "r"(2)); sn == SNMAGIC;})
|
||||
|
||||
#ifdef CONFIG_IA64_SGI_SN_SIM
|
||||
#define SIMULATOR_SLEEP() asm("nop.i 0x8beef")
|
||||
|
||||
#define IS_RUNNING_ON_SIMULATOR() (sn_prom_type)
|
||||
#define IS_RUNNING_ON_FAKE_PROM() (sn_prom_type == 2)
|
||||
extern int sn_prom_type; /* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */
|
||||
#else
|
||||
|
||||
#define IS_RUNNING_ON_SIMULATOR() (0)
|
||||
#define IS_RUNNING_ON_FAKE_PROM() (0)
|
||||
#define SIMULATOR_SLEEP()
|
||||
|
||||
#endif
|
||||
|
|
|
@ -223,4 +223,6 @@ struct sn_hwperf_ioctl_args {
|
|||
#define SN_HWPERF_OP_RECONFIGURE 253
|
||||
#define SN_HWPERF_OP_INVAL 254
|
||||
|
||||
int sn_topology_open(struct inode *inode, struct file *file);
|
||||
int sn_topology_release(struct inode *inode, struct file *file);
|
||||
#endif /* SN_HWPERF_H */
|
||||
|
|
|
@ -132,6 +132,8 @@
|
|||
#define SALRET_INVALID_ARG (-2)
|
||||
#define SALRET_ERROR (-3)
|
||||
|
||||
#define SN_SAL_FAKE_PROM 0x02009999
|
||||
|
||||
|
||||
/**
|
||||
* sn_sal_rev_major - get the major SGI SAL revision number
|
||||
|
@ -1105,4 +1107,12 @@ ia64_sn_bte_recovery(nasid_t nasid)
|
|||
return (int) rv.status;
|
||||
}
|
||||
|
||||
static inline int
|
||||
ia64_sn_is_fake_prom(void)
|
||||
{
|
||||
struct ia64_sal_retval rv;
|
||||
SAL_CALL_NOLOCK(rv, SN_SAL_FAKE_PROM, 0, 0, 0, 0, 0, 0, 0);
|
||||
return (rv.status == 0);
|
||||
}
|
||||
|
||||
#endif /* _ASM_IA64_SN_SN_SAL_H */
|
||||
|
|
|
@ -201,6 +201,7 @@ tioca_tlbflush(struct tioca_kernel *tioca_kernel)
|
|||
}
|
||||
|
||||
extern uint32_t tioca_gart_found;
|
||||
extern struct list_head tioca_list;
|
||||
extern int tioca_init_provider(void);
|
||||
extern void tioca_fastwrite_enable(struct tioca_kernel *tioca_kern);
|
||||
#endif /* _ASM_IA64_SN_TIO_CA_AGP_PROVIDER_H */
|
||||
|
|
|
@ -14,7 +14,10 @@
|
|||
* videoram directly without any black magic.
|
||||
*/
|
||||
|
||||
#define VGA_MAP_MEM(x) ((unsigned long) ioremap((x), 0))
|
||||
extern unsigned long vga_console_iobase;
|
||||
extern unsigned long vga_console_membase;
|
||||
|
||||
#define VGA_MAP_MEM(x) ((unsigned long) ioremap(vga_console_membase + (x), 0))
|
||||
|
||||
#define vga_readb(x) (*(x))
|
||||
#define vga_writeb(x,y) (*(y) = (x))
|
||||
|
|
|
@ -26,54 +26,9 @@
|
|||
#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define FOURPORT_FLAGS ASYNC_FOURPORT
|
||||
#define ACCENT_FLAGS 0
|
||||
#define BOCA_FLAGS 0
|
||||
#endif
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \
|
||||
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \
|
||||
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
|
||||
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define EXTRA_SERIAL_PORT_DEFNS \
|
||||
{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, /* ttyS4 */ \
|
||||
{ 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS }, /* ttyS5 */ \
|
||||
{ 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS }, /* ttyS6 */ \
|
||||
{ 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS }, /* ttyS7 */ \
|
||||
{ 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS }, /* ttyS8 */ \
|
||||
{ 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS }, /* ttyS9 */ \
|
||||
{ 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS }, /* ttyS10 */ \
|
||||
{ 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS }, /* ttyS11 */ \
|
||||
{ 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS }, /* ttyS12 */ \
|
||||
{ 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS }, /* ttyS13 */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS14 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS15 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS }, /* ttyS16 */ \
|
||||
{ 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS }, /* ttyS17 */ \
|
||||
{ 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS }, /* ttyS18 */ \
|
||||
{ 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS }, /* ttyS19 */ \
|
||||
{ 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS }, /* ttyS20 */ \
|
||||
{ 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS }, /* ttyS21 */ \
|
||||
{ 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS }, /* ttyS22 */ \
|
||||
{ 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS }, /* ttyS23 */ \
|
||||
{ 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS }, /* ttyS24 */ \
|
||||
{ 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS }, /* ttyS25 */ \
|
||||
{ 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS }, /* ttyS26 */ \
|
||||
{ 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS }, /* ttyS27 */ \
|
||||
{ 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS }, /* ttyS28 */ \
|
||||
{ 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS }, /* ttyS29 */ \
|
||||
{ 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS }, /* ttyS30 */ \
|
||||
{ 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS }, /* ttyS31 */
|
||||
#else
|
||||
#define EXTRA_SERIAL_PORT_DEFNS
|
||||
#endif
|
||||
|
||||
#define SERIAL_PORT_DFNS \
|
||||
STD_SERIAL_PORT_DEFNS \
|
||||
EXTRA_SERIAL_PORT_DEFNS
|
||||
|
|
|
@ -29,32 +29,6 @@
|
|||
#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define FOURPORT_FLAGS ASYNC_FOURPORT
|
||||
#define ACCENT_FLAGS 0
|
||||
#define BOCA_FLAGS 0
|
||||
#define HUB6_FLAGS 0
|
||||
#define RS_TABLE_SIZE 64
|
||||
#else
|
||||
#define RS_TABLE_SIZE
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following define the access methods for the HUB6 card. All
|
||||
* access is through two ports for all 24 possible chips. The card is
|
||||
* selected through the high 2 bits, the port on that card with the
|
||||
* "middle" 3 bits, and the register on that port with the bottom
|
||||
* 3 bits.
|
||||
*
|
||||
* While the access port and interrupt is configurable, the default
|
||||
* port locations are 0x302 for the port control register, and 0x303
|
||||
* for the data read/write register. Normally, the interrupt is at irq3
|
||||
* but can be anything from 3 to 7 inclusive. Note that using 3 will
|
||||
* require disabling com2.
|
||||
*/
|
||||
|
||||
#define C_P(card,port) (((card)<<6|(port)<<3) + 1)
|
||||
|
||||
#ifdef CONFIG_MACH_JAZZ
|
||||
#include <asm/jazz.h>
|
||||
|
||||
|
@ -240,66 +214,10 @@
|
|||
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \
|
||||
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define EXTRA_SERIAL_PORT_DEFNS \
|
||||
{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, /* ttyS4 */ \
|
||||
{ 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS }, /* ttyS5 */ \
|
||||
{ 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS }, /* ttyS6 */ \
|
||||
{ 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS }, /* ttyS7 */ \
|
||||
{ 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS }, /* ttyS8 */ \
|
||||
{ 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS }, /* ttyS9 */ \
|
||||
{ 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS }, /* ttyS10 */ \
|
||||
{ 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS }, /* ttyS11 */ \
|
||||
{ 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS }, /* ttyS12 */ \
|
||||
{ 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS }, /* ttyS13 */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS14 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS15 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS }, /* ttyS16 */ \
|
||||
{ 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS }, /* ttyS17 */ \
|
||||
{ 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS }, /* ttyS18 */ \
|
||||
{ 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS }, /* ttyS19 */ \
|
||||
{ 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS }, /* ttyS20 */ \
|
||||
{ 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS }, /* ttyS21 */ \
|
||||
{ 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS }, /* ttyS22 */ \
|
||||
{ 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS }, /* ttyS23 */ \
|
||||
{ 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS }, /* ttyS24 */ \
|
||||
{ 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS }, /* ttyS25 */ \
|
||||
{ 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS }, /* ttyS26 */ \
|
||||
{ 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS }, /* ttyS27 */ \
|
||||
{ 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS }, /* ttyS28 */ \
|
||||
{ 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS }, /* ttyS29 */ \
|
||||
{ 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS }, /* ttyS30 */ \
|
||||
{ 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS }, /* ttyS31 */
|
||||
#else /* CONFIG_SERIAL_MANY_PORTS */
|
||||
#define EXTRA_SERIAL_PORT_DEFNS
|
||||
#endif /* CONFIG_SERIAL_MANY_PORTS */
|
||||
|
||||
#else /* CONFIG_HAVE_STD_PC_SERIAL_PORTS */
|
||||
#define STD_SERIAL_PORT_DEFNS
|
||||
#define EXTRA_SERIAL_PORT_DEFNS
|
||||
#endif /* CONFIG_HAVE_STD_PC_SERIAL_PORTS */
|
||||
|
||||
/* You can have up to four HUB6's in the system, but I've only
|
||||
* included two cards here for a total of twelve ports.
|
||||
*/
|
||||
#if (defined(CONFIG_HUB6) && defined(CONFIG_SERIAL_MANY_PORTS))
|
||||
#define HUB6_SERIAL_PORT_DFNS \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,0) }, /* ttyS32 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,1) }, /* ttyS33 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,2) }, /* ttyS34 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,3) }, /* ttyS35 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,4) }, /* ttyS36 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,5) }, /* ttyS37 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,0) }, /* ttyS38 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,1) }, /* ttyS39 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,2) }, /* ttyS40 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,3) }, /* ttyS41 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,4) }, /* ttyS42 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,5) }, /* ttyS43 */
|
||||
#else
|
||||
#define HUB6_SERIAL_PORT_DFNS
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MOMENCO_JAGUAR_ATX
|
||||
/* Ordinary NS16552 duart with a 20MHz crystal. */
|
||||
#define JAGUAR_ATX_UART_CLK 20000000
|
||||
|
@ -427,8 +345,6 @@
|
|||
COBALT_SERIAL_PORT_DEFNS \
|
||||
DDB5477_SERIAL_PORT_DEFNS \
|
||||
EV96100_SERIAL_PORT_DEFNS \
|
||||
EXTRA_SERIAL_PORT_DEFNS \
|
||||
HUB6_SERIAL_PORT_DFNS \
|
||||
IP32_SERIAL_PORT_DEFNS \
|
||||
ITE_SERIAL_PORT_DEFNS \
|
||||
IVR_SERIAL_PORT_DEFNS \
|
||||
|
|
|
@ -19,18 +19,4 @@
|
|||
* A500 w/ PCI serial cards: 5 + 4 * card ~= 17
|
||||
*/
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
{ 0, }, /* ttyS0 */ \
|
||||
{ 0, }, /* ttyS1 */ \
|
||||
{ 0, }, /* ttyS2 */ \
|
||||
{ 0, }, /* ttyS3 */ \
|
||||
{ 0, }, /* ttyS4 */ \
|
||||
{ 0, }, /* ttyS5 */ \
|
||||
{ 0, }, /* ttyS6 */ \
|
||||
{ 0, }, /* ttyS7 */ \
|
||||
{ 0, }, /* ttyS8 */
|
||||
|
||||
|
||||
#define SERIAL_PORT_DFNS \
|
||||
STD_SERIAL_PORT_DEFNS
|
||||
|
||||
#define SERIAL_PORT_DFNS
|
||||
|
|
|
@ -35,93 +35,9 @@
|
|||
#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define FOURPORT_FLAGS ASYNC_FOURPORT
|
||||
#define ACCENT_FLAGS 0
|
||||
#define BOCA_FLAGS 0
|
||||
#define HUB6_FLAGS 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following define the access methods for the HUB6 card. All
|
||||
* access is through two ports for all 24 possible chips. The card is
|
||||
* selected through the high 2 bits, the port on that card with the
|
||||
* "middle" 3 bits, and the register on that port with the bottom
|
||||
* 3 bits.
|
||||
*
|
||||
* While the access port and interrupt is configurable, the default
|
||||
* port locations are 0x302 for the port control register, and 0x303
|
||||
* for the data read/write register. Normally, the interrupt is at irq3
|
||||
* but can be anything from 3 to 7 inclusive. Note that using 3 will
|
||||
* require disabling com2.
|
||||
*/
|
||||
|
||||
#define C_P(card,port) (((card)<<6|(port)<<3) + 1)
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \
|
||||
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \
|
||||
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
|
||||
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define EXTRA_SERIAL_PORT_DEFNS \
|
||||
{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, /* ttyS4 */ \
|
||||
{ 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS }, /* ttyS5 */ \
|
||||
{ 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS }, /* ttyS6 */ \
|
||||
{ 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS }, /* ttyS7 */ \
|
||||
{ 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS }, /* ttyS8 */ \
|
||||
{ 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS }, /* ttyS9 */ \
|
||||
{ 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS }, /* ttyS10 */ \
|
||||
{ 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS }, /* ttyS11 */ \
|
||||
{ 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS }, /* ttyS12 */ \
|
||||
{ 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS }, /* ttyS13 */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS14 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS15 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS }, /* ttyS16 */ \
|
||||
{ 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS }, /* ttyS17 */ \
|
||||
{ 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS }, /* ttyS18 */ \
|
||||
{ 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS }, /* ttyS19 */ \
|
||||
{ 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS }, /* ttyS20 */ \
|
||||
{ 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS }, /* ttyS21 */ \
|
||||
{ 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS }, /* ttyS22 */ \
|
||||
{ 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS }, /* ttyS23 */ \
|
||||
{ 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS }, /* ttyS24 */ \
|
||||
{ 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS }, /* ttyS25 */ \
|
||||
{ 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS }, /* ttyS26 */ \
|
||||
{ 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS }, /* ttyS27 */ \
|
||||
{ 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS }, /* ttyS28 */ \
|
||||
{ 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS }, /* ttyS29 */ \
|
||||
{ 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS }, /* ttyS30 */ \
|
||||
{ 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS }, /* ttyS31 */
|
||||
#else
|
||||
#define EXTRA_SERIAL_PORT_DEFNS
|
||||
#endif
|
||||
|
||||
/* You can have up to four HUB6's in the system, but I've only
|
||||
* included two cards here for a total of twelve ports.
|
||||
*/
|
||||
#if (defined(CONFIG_HUB6) && defined(CONFIG_SERIAL_MANY_PORTS))
|
||||
#define HUB6_SERIAL_PORT_DFNS \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,0) }, /* ttyS32 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,1) }, /* ttyS33 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,2) }, /* ttyS34 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,3) }, /* ttyS35 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,4) }, /* ttyS36 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,5) }, /* ttyS37 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,0) }, /* ttyS38 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,1) }, /* ttyS39 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,2) }, /* ttyS40 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,3) }, /* ttyS41 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,4) }, /* ttyS42 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,5) }, /* ttyS43 */
|
||||
#else
|
||||
#define HUB6_SERIAL_PORT_DFNS
|
||||
#endif
|
||||
|
||||
#define SERIAL_PORT_DFNS \
|
||||
STD_SERIAL_PORT_DEFNS \
|
||||
EXTRA_SERIAL_PORT_DEFNS \
|
||||
HUB6_SERIAL_PORT_DFNS
|
||||
|
|
|
@ -14,13 +14,10 @@
|
|||
#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
|
||||
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x3F8, HD64465_IRQ_UART, STD_COM_FLAGS } /* ttyS0 */
|
||||
|
||||
|
||||
#define SERIAL_PORT_DFNS STD_SERIAL_PORT_DEFNS
|
||||
|
||||
/* XXX: This should be moved ino irq.h */
|
||||
#define irq_cannonicalize(x) (x)
|
||||
|
||||
|
|
|
@ -10,13 +10,11 @@
|
|||
* it's got the keyboard controller behind it so we can't really use it
|
||||
* (without moving the keyboard driver to userspace, which doesn't sound
|
||||
* like a very good idea) */
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x11C00, EC3104_IRQBASE+7, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0x12000, EC3104_IRQBASE+8, STD_COM_FLAGS }, /* ttyS1 */ \
|
||||
{ 0, BASE_BAUD, 0x12400, EC3104_IRQBASE+9, STD_COM_FLAGS }, /* ttyS2 */
|
||||
|
||||
#define SERIAL_PORT_DFNS STD_SERIAL_PORT_DEFNS
|
||||
|
||||
/* XXX: This should be moved ino irq.h */
|
||||
#define irq_cannonicalize(x) (x)
|
||||
|
|
|
@ -29,20 +29,18 @@
|
|||
#ifdef CONFIG_HD64465
|
||||
#include <asm/hd64465.h>
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x3F8, HD64465_IRQ_UART, STD_COM_FLAGS } /* ttyS0 */
|
||||
|
||||
#else
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS } /* ttyS1 */
|
||||
|
||||
#endif
|
||||
|
||||
#define SERIAL_PORT_DFNS STD_SERIAL_PORT_DEFNS
|
||||
|
||||
#endif
|
||||
#endif /* _ASM_SERIAL_H */
|
||||
|
|
|
@ -20,13 +20,11 @@
|
|||
|
||||
#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS } /* ttyS1 */
|
||||
|
||||
#define SERIAL_PORT_DFNS STD_SERIAL_PORT_DEFNS
|
||||
|
||||
/* XXX: This should be moved ino irq.h */
|
||||
#define irq_cannonicalize(x) (x)
|
||||
|
||||
|
|
|
@ -22,109 +22,9 @@
|
|||
#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define FOURPORT_FLAGS ASYNC_FOURPORT
|
||||
#define ACCENT_FLAGS 0
|
||||
#define BOCA_FLAGS 0
|
||||
#define HUB6_FLAGS 0
|
||||
#endif
|
||||
|
||||
#define MCA_COM_FLAGS (STD_COM_FLAGS|ASYNC_BOOT_ONLYMCA)
|
||||
|
||||
/*
|
||||
* The following define the access methods for the HUB6 card. All
|
||||
* access is through two ports for all 24 possible chips. The card is
|
||||
* selected through the high 2 bits, the port on that card with the
|
||||
* "middle" 3 bits, and the register on that port with the bottom
|
||||
* 3 bits.
|
||||
*
|
||||
* While the access port and interrupt is configurable, the default
|
||||
* port locations are 0x302 for the port control register, and 0x303
|
||||
* for the data read/write register. Normally, the interrupt is at irq3
|
||||
* but can be anything from 3 to 7 inclusive. Note that using 3 will
|
||||
* require disabling com2.
|
||||
*/
|
||||
|
||||
#define C_P(card,port) (((card)<<6|(port)<<3) + 1)
|
||||
|
||||
#define STD_SERIAL_PORT_DEFNS \
|
||||
#define SERIAL_PORT_DFNS \
|
||||
/* UART CLK PORT IRQ FLAGS */ \
|
||||
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
|
||||
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \
|
||||
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \
|
||||
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
|
||||
|
||||
|
||||
#ifdef CONFIG_SERIAL_MANY_PORTS
|
||||
#define EXTRA_SERIAL_PORT_DEFNS \
|
||||
{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, /* ttyS4 */ \
|
||||
{ 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS }, /* ttyS5 */ \
|
||||
{ 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS }, /* ttyS6 */ \
|
||||
{ 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS }, /* ttyS7 */ \
|
||||
{ 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS }, /* ttyS8 */ \
|
||||
{ 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS }, /* ttyS9 */ \
|
||||
{ 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS }, /* ttyS10 */ \
|
||||
{ 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS }, /* ttyS11 */ \
|
||||
{ 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS }, /* ttyS12 */ \
|
||||
{ 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS }, /* ttyS13 */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS14 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS15 (spare) */ \
|
||||
{ 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS }, /* ttyS16 */ \
|
||||
{ 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS }, /* ttyS17 */ \
|
||||
{ 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS }, /* ttyS18 */ \
|
||||
{ 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS }, /* ttyS19 */ \
|
||||
{ 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS }, /* ttyS20 */ \
|
||||
{ 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS }, /* ttyS21 */ \
|
||||
{ 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS }, /* ttyS22 */ \
|
||||
{ 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS }, /* ttyS23 */ \
|
||||
{ 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS }, /* ttyS24 */ \
|
||||
{ 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS }, /* ttyS25 */ \
|
||||
{ 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS }, /* ttyS26 */ \
|
||||
{ 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS }, /* ttyS27 */ \
|
||||
{ 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS }, /* ttyS28 */ \
|
||||
{ 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS }, /* ttyS29 */ \
|
||||
{ 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS }, /* ttyS30 */ \
|
||||
{ 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS }, /* ttyS31 */
|
||||
#else
|
||||
#define EXTRA_SERIAL_PORT_DEFNS
|
||||
#endif
|
||||
|
||||
/* You can have up to four HUB6's in the system, but I've only
|
||||
* included two cards here for a total of twelve ports.
|
||||
*/
|
||||
#if (defined(CONFIG_HUB6) && defined(CONFIG_SERIAL_MANY_PORTS))
|
||||
#define HUB6_SERIAL_PORT_DFNS \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,0) }, /* ttyS32 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,1) }, /* ttyS33 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,2) }, /* ttyS34 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,3) }, /* ttyS35 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,4) }, /* ttyS36 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,5) }, /* ttyS37 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,0) }, /* ttyS38 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,1) }, /* ttyS39 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,2) }, /* ttyS40 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,3) }, /* ttyS41 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,4) }, /* ttyS42 */ \
|
||||
{ 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,5) }, /* ttyS43 */
|
||||
#else
|
||||
#define HUB6_SERIAL_PORT_DFNS
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MCA
|
||||
#define MCA_SERIAL_PORT_DFNS \
|
||||
{ 0, BASE_BAUD, 0x3220, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x3228, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x4220, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x4228, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x5220, 3, MCA_COM_FLAGS }, \
|
||||
{ 0, BASE_BAUD, 0x5228, 3, MCA_COM_FLAGS },
|
||||
#else
|
||||
#define MCA_SERIAL_PORT_DFNS
|
||||
#endif
|
||||
|
||||
#define SERIAL_PORT_DFNS \
|
||||
STD_SERIAL_PORT_DEFNS \
|
||||
EXTRA_SERIAL_PORT_DEFNS \
|
||||
HUB6_SERIAL_PORT_DFNS \
|
||||
MCA_SERIAL_PORT_DFNS
|
||||
|
||||
|
|
Loading…
Reference in New Issue