mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge Linux 2.6.23
This commit is contained in:
commit
b160292cc2
1054 changed files with 60736 additions and 21076 deletions
|
|
@ -321,8 +321,7 @@ struct acpi_bus_event {
|
|||
};
|
||||
|
||||
extern struct kset acpi_subsys;
|
||||
extern int acpi_bus_generate_genetlink_event(struct acpi_device *device,
|
||||
u8 type, int data);
|
||||
extern int acpi_bus_generate_netlink_event(const char*, const char*, u8, int);
|
||||
/*
|
||||
* External Functions
|
||||
*/
|
||||
|
|
@ -332,8 +331,13 @@ void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context);
|
|||
int acpi_bus_get_status(struct acpi_device *device);
|
||||
int acpi_bus_get_power(acpi_handle handle, int *state);
|
||||
int acpi_bus_set_power(acpi_handle handle, int state);
|
||||
int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data);
|
||||
#ifdef CONFIG_ACPI_PROC_EVENT
|
||||
int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data);
|
||||
int acpi_bus_receive_event(struct acpi_bus_event *event);
|
||||
#else
|
||||
static inline int acpi_bus_generate_proc_event(struct acpi_device *device, u8 type, int data)
|
||||
{ return 0; }
|
||||
#endif
|
||||
int acpi_bus_register_driver(struct acpi_driver *driver);
|
||||
void acpi_bus_unregister_driver(struct acpi_driver *driver);
|
||||
int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent,
|
||||
|
|
|
|||
|
|
@ -147,10 +147,6 @@ static inline void unregister_hotplug_dock_device(acpi_handle handle)
|
|||
/*--------------------------------------------------------------------------
|
||||
Suspend/Resume
|
||||
-------------------------------------------------------------------------- */
|
||||
#ifdef CONFIG_ACPI_SLEEP
|
||||
extern int acpi_sleep_init(void);
|
||||
#else
|
||||
static inline int acpi_sleep_init(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#endif /*__ACPI_DRIVERS_H__*/
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ acpi_walk_namespace(acpi_object_type type,
|
|||
void *context, void **return_value);
|
||||
|
||||
acpi_status
|
||||
acpi_get_devices(char *HID,
|
||||
acpi_get_devices(const char *HID,
|
||||
acpi_walk_callback user_function,
|
||||
void *context, void **return_value);
|
||||
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ struct acpi_init_walk_info {
|
|||
struct acpi_get_devices_info {
|
||||
acpi_walk_callback user_function;
|
||||
void *context;
|
||||
char *hid;
|
||||
const char *hid;
|
||||
};
|
||||
|
||||
union acpi_aml_operands {
|
||||
|
|
|
|||
|
|
@ -320,6 +320,8 @@ int acpi_processor_power_init(struct acpi_processor *pr,
|
|||
int acpi_processor_cst_has_changed(struct acpi_processor *pr);
|
||||
int acpi_processor_power_exit(struct acpi_processor *pr,
|
||||
struct acpi_device *device);
|
||||
int acpi_processor_suspend(struct acpi_device * device, pm_message_t state);
|
||||
int acpi_processor_resume(struct acpi_device * device);
|
||||
|
||||
/* in processor_thermal.c */
|
||||
int acpi_processor_get_limit_info(struct acpi_processor *pr);
|
||||
|
|
|
|||
|
|
@ -42,4 +42,7 @@
|
|||
*/
|
||||
#define NR_IRQS (NR_AIC_IRQS + (5 * 32))
|
||||
|
||||
/* FIQ is AIC source 0. */
|
||||
#define FIQ_START AT91_ID_FIQ
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ struct omap_irda_config {
|
|||
unsigned long src_start;
|
||||
int tx_trigger;
|
||||
int rx_trigger;
|
||||
int mode;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -426,6 +426,13 @@ static inline void flush_anon_page(struct vm_area_struct *vma,
|
|||
*/
|
||||
#define flush_icache_page(vma,page) do { } while (0)
|
||||
|
||||
static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt,
|
||||
unsigned offset, size_t size)
|
||||
{
|
||||
const void *start = (void __force *)virt + offset;
|
||||
dmac_inv_range(start, start + size);
|
||||
}
|
||||
|
||||
#define __cacheid_present(val) (val != read_cpuid(CPUID_ID))
|
||||
#define __cacheid_type_v7(val) ((val & (7 << 29)) == (4 << 29))
|
||||
|
||||
|
|
|
|||
|
|
@ -30,11 +30,11 @@
|
|||
#define S3C_ADDR(x) (S3C_ADDR_BASE + (x))
|
||||
#endif
|
||||
|
||||
#define S3C_VA_IRQ S3C_ADDR(0x000000000) /* irq controller(s) */
|
||||
#define S3C_VA_SYS S3C_ADDR(0x001000000) /* system control */
|
||||
#define S3C_VA_MEM S3C_ADDR(0x002000000) /* system control */
|
||||
#define S3C_VA_TIMER S3C_ADDR(0x003000000) /* timer block */
|
||||
#define S3C_VA_WATCHDOG S3C_ADDR(0x004000000) /* watchdog */
|
||||
#define S3C_VA_UART S3C_ADDR(0x010000000) /* UART */
|
||||
#define S3C_VA_IRQ S3C_ADDR(0x00000000) /* irq controller(s) */
|
||||
#define S3C_VA_SYS S3C_ADDR(0x00100000) /* system control */
|
||||
#define S3C_VA_MEM S3C_ADDR(0x00200000) /* system control */
|
||||
#define S3C_VA_TIMER S3C_ADDR(0x00300000) /* timer block */
|
||||
#define S3C_VA_WATCHDOG S3C_ADDR(0x00400000) /* watchdog */
|
||||
#define S3C_VA_UART S3C_ADDR(0x01000000) /* UART */
|
||||
|
||||
#endif /* __ASM_PLAT_MAP_H */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include <linux/serial.h>
|
||||
#include <asm/dma.h>
|
||||
#include <asm/portmux.h>
|
||||
|
||||
#define NR_PORTS 1
|
||||
|
||||
|
|
@ -92,18 +93,24 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
|||
}
|
||||
};
|
||||
|
||||
#define DRIVER_NAME "bfin-uart"
|
||||
|
||||
int nr_ports = NR_PORTS;
|
||||
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
|
||||
{
|
||||
|
||||
#ifdef CONFIG_SERIAL_BFIN_UART0
|
||||
peripheral_request(P_UART0_TX, DRIVER_NAME);
|
||||
peripheral_request(P_UART0_RX, DRIVER_NAME);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
||||
if (uart->cts_pin >= 0) {
|
||||
gpio_request(uart->cts_pin, NULL);
|
||||
gpio_request(uart->cts_pin, DRIVER_NAME);
|
||||
gpio_direction_input(uart->cts_pin);
|
||||
}
|
||||
if (uart->rts_pin >= 0) {
|
||||
gpio_request(uart->rts_pin, NULL);
|
||||
gpio_request(uart->rts_pin, DRIVER_NAME);
|
||||
gpio_direction_input(uart->rts_pin);
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include <linux/serial.h>
|
||||
#include <asm/dma.h>
|
||||
#include <asm/portmux.h>
|
||||
|
||||
#define NR_PORTS 2
|
||||
|
||||
|
|
@ -122,25 +123,29 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
|||
|
||||
int nr_ports = ARRAY_SIZE(bfin_serial_resource);
|
||||
|
||||
#define DRIVER_NAME "bfin-uart"
|
||||
|
||||
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
|
||||
{
|
||||
unsigned short val;
|
||||
val = bfin_read16(BFIN_PORT_MUX);
|
||||
val &= ~(PFDE | PFTE);
|
||||
bfin_write16(BFIN_PORT_MUX, val);
|
||||
|
||||
val = bfin_read16(PORTF_FER);
|
||||
val |= 0xF;
|
||||
bfin_write16(PORTF_FER, val);
|
||||
#ifdef CONFIG_SERIAL_BFIN_UART0
|
||||
peripheral_request(P_UART0_TX, DRIVER_NAME);
|
||||
peripheral_request(P_UART0_RX, DRIVER_NAME);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_BFIN_UART1
|
||||
peripheral_request(P_UART1_TX, DRIVER_NAME);
|
||||
peripheral_request(P_UART1_RX, DRIVER_NAME);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
||||
if (uart->cts_pin >= 0) {
|
||||
gpio_request(uart->cts_pin, NULL);
|
||||
gpio_request(uart->cts_pin, DRIVER_NAME);
|
||||
gpio_direction_input(uart->cts_pin);
|
||||
}
|
||||
|
||||
if (uart->rts_pin >= 0) {
|
||||
gpio_request(uart->rts_pin, NULL);
|
||||
gpio_request(uart->rts_pin, DRIVER_NAME);
|
||||
gpio_direction_output(uart->rts_pin);
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -106,4 +106,37 @@
|
|||
#define P_SPI0_SSEL2 (P_DEFINED | P_IDENT(PORT_PJ11) | P_FUNCT(1))
|
||||
#define P_SPI0_SSEL7 (P_DEFINED | P_IDENT(PORT_PJ5) | P_FUNCT(2))
|
||||
|
||||
#endif /* _MACH_PORTMUX_H_ */
|
||||
#define P_MII0 {\
|
||||
P_MII0_ETxD0, \
|
||||
P_MII0_ETxD1, \
|
||||
P_MII0_ETxD2, \
|
||||
P_MII0_ETxD3, \
|
||||
P_MII0_ETxEN, \
|
||||
P_MII0_TxCLK, \
|
||||
P_MII0_PHYINT, \
|
||||
P_MII0_COL, \
|
||||
P_MII0_ERxD0, \
|
||||
P_MII0_ERxD1, \
|
||||
P_MII0_ERxD2, \
|
||||
P_MII0_ERxD3, \
|
||||
P_MII0_ERxDV, \
|
||||
P_MII0_ERxCLK, \
|
||||
P_MII0_ERxER, \
|
||||
P_MII0_CRS, \
|
||||
P_MDC, \
|
||||
P_MDIO, 0}
|
||||
|
||||
|
||||
#define P_RMII0 {\
|
||||
P_MII0_ETxD0, \
|
||||
P_MII0_ETxD1, \
|
||||
P_MII0_ETxEN, \
|
||||
P_MII0_ERxD0, \
|
||||
P_MII0_ERxD1, \
|
||||
P_MII0_ERxER, \
|
||||
P_RMII0_REF_CLK, \
|
||||
P_RMII0_MDINT, \
|
||||
P_RMII0_CRS_DV, \
|
||||
P_MDC, \
|
||||
P_MDIO, 0}
|
||||
#endif /* _MACH_PORTMUX_H_ */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include <linux/serial.h>
|
||||
#include <asm/dma.h>
|
||||
#include <asm/portmux.h>
|
||||
|
||||
#define NR_PORTS 1
|
||||
|
||||
|
|
@ -92,18 +93,24 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
|||
}
|
||||
};
|
||||
|
||||
#define DRIVER_NAME "bfin-uart"
|
||||
|
||||
int nr_ports = NR_PORTS;
|
||||
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
|
||||
{
|
||||
|
||||
#ifdef CONFIG_SERIAL_BFIN_UART0
|
||||
peripheral_request(P_UART0_TX, DRIVER_NAME);
|
||||
peripheral_request(P_UART0_RX, DRIVER_NAME);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
||||
if (uart->cts_pin >= 0) {
|
||||
gpio_request(uart->cts_pin, NULL);
|
||||
gpio_request(uart->cts_pin, DRIVER_NAME);
|
||||
gpio_direction_input(uart->cts_pin);
|
||||
}
|
||||
if (uart->rts_pin >= 0) {
|
||||
gpio_request(uart->rts_pin, NULL);
|
||||
gpio_request(uart->rts_pin, DRIVER_NAME);
|
||||
gpio_direction_input(uart->rts_pin);
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -83,9 +83,9 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val)
|
|||
|
||||
/* For MMR's that are reserved on Core B, set up defines to better integrate with other ports */
|
||||
#define bfin_read_SWRST() bfin_read_SICA_SWRST()
|
||||
#define bfin_write_SWRST() bfin_write_SICA_SWRST()
|
||||
#define bfin_write_SWRST(val) bfin_write_SICA_SWRST(val)
|
||||
#define bfin_read_SYSCR() bfin_read_SICA_SYSCR()
|
||||
#define bfin_write_SYSCR() bfin_write_SICA_SYSCR()
|
||||
#define bfin_write_SYSCR(val) bfin_write_SICA_SYSCR(val)
|
||||
|
||||
/* System Reset and Interrupt Controller registers for core A (0xFFC0 0100-0xFFC0 01FF) */
|
||||
#define bfin_read_SICA_SWRST() bfin_read16(SICA_SWRST)
|
||||
|
|
|
|||
|
|
@ -14,6 +14,12 @@
|
|||
#define P_MAYSHARE 0x2000
|
||||
#define P_DONTCARE 0x1000
|
||||
|
||||
|
||||
int peripheral_request(unsigned short per, const char *label);
|
||||
void peripheral_free(unsigned short per);
|
||||
int peripheral_request_list(unsigned short per[], const char *label);
|
||||
void peripheral_free_list(unsigned short per[]);
|
||||
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/mach/portmux.h>
|
||||
|
||||
|
|
@ -145,6 +151,22 @@
|
|||
#define P_SPI2_SSEL3 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI2_SSEL4
|
||||
#define P_SPI2_SSEL4 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI2_SSEL5
|
||||
#define P_SPI2_SSEL5 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI2_SSEL6
|
||||
#define P_SPI2_SSEL6 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI2_SSEL7
|
||||
#define P_SPI2_SSEL7 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI2_SCK
|
||||
#define P_SPI2_SCK P_UNDEF
|
||||
#endif
|
||||
|
|
@ -513,6 +535,22 @@
|
|||
#define P_SPI0_SSEL3 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI0_SSEL4
|
||||
#define P_SPI0_SSEL4 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI0_SSEL5
|
||||
#define P_SPI0_SSEL5 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI0_SSEL6
|
||||
#define P_SPI0_SSEL6 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI0_SSEL7
|
||||
#define P_SPI0_SSEL7 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_UART0_TX
|
||||
#define P_UART0_TX P_UNDEF
|
||||
#endif
|
||||
|
|
@ -741,6 +779,23 @@
|
|||
#define P_SPI1_SSEL3 P_UNDEF
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef P_SPI1_SSEL4
|
||||
#define P_SPI1_SSEL4 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI1_SSEL5
|
||||
#define P_SPI1_SSEL5 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI1_SSEL6
|
||||
#define P_SPI1_SSEL6 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI1_SSEL7
|
||||
#define P_SPI1_SSEL7 P_UNDEF
|
||||
#endif
|
||||
|
||||
#ifndef P_SPI1_SCK
|
||||
#define P_SPI1_SCK P_UNDEF
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -9,13 +9,16 @@ extern inline char *strcpy(char *dest, const char *src)
|
|||
char *xdest = dest;
|
||||
char temp = 0;
|
||||
|
||||
__asm__ __volatile__
|
||||
("1:\t%2 = B [%1++] (Z);\n\t"
|
||||
"B [%0++] = %2;\n\t"
|
||||
"CC = %2;\n\t"
|
||||
"if cc jump 1b (bp);\n"
|
||||
: "+&a" (dest), "+&a" (src), "=&d" (temp)
|
||||
::"memory", "CC");
|
||||
__asm__ __volatile__ (
|
||||
"1:"
|
||||
"%2 = B [%1++] (Z);"
|
||||
"B [%0++] = %2;"
|
||||
"CC = %2;"
|
||||
"if cc jump 1b (bp);"
|
||||
: "+&a" (dest), "+&a" (src), "=&d" (temp)
|
||||
:
|
||||
: "memory", "CC");
|
||||
|
||||
return xdest;
|
||||
}
|
||||
|
||||
|
|
@ -28,37 +31,56 @@ extern inline char *strncpy(char *dest, const char *src, size_t n)
|
|||
if (n == 0)
|
||||
return xdest;
|
||||
|
||||
__asm__ __volatile__
|
||||
("1:\t%3 = B [%1++] (Z);\n\t"
|
||||
"B [%0++] = %3;\n\t"
|
||||
"CC = %3;\n\t"
|
||||
"if ! cc jump 2f;\n\t"
|
||||
"%2 += -1;\n\t"
|
||||
"CC = %2 == 0;\n\t"
|
||||
"if ! cc jump 1b (bp);\n"
|
||||
"2:\n"
|
||||
: "+&a" (dest), "+&a" (src), "+&da" (n), "=&d" (temp)
|
||||
::"memory", "CC");
|
||||
__asm__ __volatile__ (
|
||||
"1:"
|
||||
"%3 = B [%1++] (Z);"
|
||||
"B [%0++] = %3;"
|
||||
"CC = %3;"
|
||||
"if ! cc jump 2f;"
|
||||
"%2 += -1;"
|
||||
"CC = %2 == 0;"
|
||||
"if ! cc jump 1b (bp);"
|
||||
"jump 4f;"
|
||||
"2:"
|
||||
/* if src is shorter than n, we need to null pad bytes now */
|
||||
"%3 = 0;"
|
||||
"3:"
|
||||
"%2 += -1;"
|
||||
"CC = %2 == 0;"
|
||||
"if cc jump 4f;"
|
||||
"B [%0++] = %3;"
|
||||
"jump 3b;"
|
||||
"4:"
|
||||
: "+&a" (dest), "+&a" (src), "+&da" (n), "=&d" (temp)
|
||||
:
|
||||
: "memory", "CC");
|
||||
|
||||
return xdest;
|
||||
}
|
||||
|
||||
#define __HAVE_ARCH_STRCMP
|
||||
extern inline int strcmp(const char *cs, const char *ct)
|
||||
{
|
||||
char __res1, __res2;
|
||||
/* need to use int's here so the char's in the assembly don't get
|
||||
* sign extended incorrectly when we don't want them to be
|
||||
*/
|
||||
int __res1, __res2;
|
||||
|
||||
__asm__
|
||||
("1:\t%2 = B[%0++] (Z);\n\t" /* get *cs */
|
||||
"%3 = B[%1++] (Z);\n\t" /* get *ct */
|
||||
"CC = %2 == %3;\n\t" /* compare a byte */
|
||||
"if ! cc jump 2f;\n\t" /* not equal, break out */
|
||||
"CC = %2;\n\t" /* at end of cs? */
|
||||
"if cc jump 1b (bp);\n\t" /* no, keep going */
|
||||
"jump.s 3f;\n" /* strings are equal */
|
||||
"2:\t%2 = %2 - %3;\n" /* *cs - *ct */
|
||||
"3:\n"
|
||||
: "+&a" (cs), "+&a" (ct), "=&d" (__res1), "=&d" (__res2)
|
||||
: : "CC");
|
||||
__asm__ __volatile__ (
|
||||
"1:"
|
||||
"%2 = B[%0++] (Z);" /* get *cs */
|
||||
"%3 = B[%1++] (Z);" /* get *ct */
|
||||
"CC = %2 == %3;" /* compare a byte */
|
||||
"if ! cc jump 2f;" /* not equal, break out */
|
||||
"CC = %2;" /* at end of cs? */
|
||||
"if cc jump 1b (bp);" /* no, keep going */
|
||||
"jump.s 3f;" /* strings are equal */
|
||||
"2:"
|
||||
"%2 = %2 - %3;" /* *cs - *ct */
|
||||
"3:"
|
||||
: "+&a" (cs), "+&a" (ct), "=&d" (__res1), "=&d" (__res2)
|
||||
:
|
||||
: "memory", "CC");
|
||||
|
||||
return __res1;
|
||||
}
|
||||
|
|
@ -66,26 +88,35 @@ extern inline int strcmp(const char *cs, const char *ct)
|
|||
#define __HAVE_ARCH_STRNCMP
|
||||
extern inline int strncmp(const char *cs, const char *ct, size_t count)
|
||||
{
|
||||
char __res1, __res2;
|
||||
/* need to use int's here so the char's in the assembly don't get
|
||||
* sign extended incorrectly when we don't want them to be
|
||||
*/
|
||||
int __res1, __res2;
|
||||
|
||||
if (!count)
|
||||
return 0;
|
||||
__asm__
|
||||
("1:\t%3 = B[%0++] (Z);\n\t" /* get *cs */
|
||||
"%4 = B[%1++] (Z);\n\t" /* get *ct */
|
||||
"CC = %3 == %4;\n\t" /* compare a byte */
|
||||
"if ! cc jump 3f;\n\t" /* not equal, break out */
|
||||
"CC = %3;\n\t" /* at end of cs? */
|
||||
"if ! cc jump 4f;\n\t" /* yes, all done */
|
||||
"%2 += -1;\n\t" /* no, adjust count */
|
||||
"CC = %2 == 0;\n\t"
|
||||
"if ! cc jump 1b;\n" /* more to do, keep going */
|
||||
"2:\t%3 = 0;\n\t" /* strings are equal */
|
||||
"jump.s 4f;\n"
|
||||
"3:\t%3 = %3 - %4;\n" /* *cs - *ct */
|
||||
"4:"
|
||||
: "+&a" (cs), "+&a" (ct), "+&da" (count), "=&d" (__res1), "=&d" (__res2)
|
||||
: : "CC");
|
||||
|
||||
__asm__ __volatile__ (
|
||||
"1:"
|
||||
"%3 = B[%0++] (Z);" /* get *cs */
|
||||
"%4 = B[%1++] (Z);" /* get *ct */
|
||||
"CC = %3 == %4;" /* compare a byte */
|
||||
"if ! cc jump 3f;" /* not equal, break out */
|
||||
"CC = %3;" /* at end of cs? */
|
||||
"if ! cc jump 4f;" /* yes, all done */
|
||||
"%2 += -1;" /* no, adjust count */
|
||||
"CC = %2 == 0;"
|
||||
"if ! cc jump 1b;" /* more to do, keep going */
|
||||
"2:"
|
||||
"%3 = 0;" /* strings are equal */
|
||||
"jump.s 4f;"
|
||||
"3:"
|
||||
"%3 = %3 - %4;" /* *cs - *ct */
|
||||
"4:"
|
||||
: "+&a" (cs), "+&a" (ct), "+&da" (count), "=&d" (__res1), "=&d" (__res2)
|
||||
:
|
||||
: "memory", "CC");
|
||||
|
||||
return __res1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
/*
|
||||
* This file contains the system call numbers.
|
||||
*/
|
||||
#define __NR_restart_syscall 0
|
||||
#define __NR_exit 1
|
||||
#define __NR_fork 2
|
||||
#define __NR_read 3
|
||||
|
|
@ -165,13 +166,13 @@
|
|||
#define __NR_sched_get_priority_min 160
|
||||
#define __NR_sched_rr_get_interval 161
|
||||
#define __NR_nanosleep 162
|
||||
/* 163 __NR_mremap */
|
||||
#define __NR_mremap 163
|
||||
#define __NR_setresuid 164
|
||||
#define __NR_getresuid 165
|
||||
/* 166 __NR_vm86 */
|
||||
/* 167 __NR_query_module */
|
||||
/* 168 __NR_poll */
|
||||
/* 169 __NR_nfsservctl */
|
||||
#define __NR_nfsservctl 169
|
||||
#define __NR_setresgid 170
|
||||
#define __NR_getresgid 171
|
||||
#define __NR_prctl 172
|
||||
|
|
@ -227,7 +228,7 @@
|
|||
/* 222 reserved for TUX */
|
||||
/* 223 reserved for TUX */
|
||||
#define __NR_gettid 224
|
||||
/* 225 __NR_readahead */
|
||||
#define __NR_readahead 225
|
||||
#define __NR_setxattr 226
|
||||
#define __NR_lsetxattr 227
|
||||
#define __NR_fsetxattr 228
|
||||
|
|
@ -287,7 +288,7 @@
|
|||
#define __NR_mq_timedreceive (__NR_mq_open+3)
|
||||
#define __NR_mq_notify (__NR_mq_open+4)
|
||||
#define __NR_mq_getsetattr (__NR_mq_open+5)
|
||||
/* 284 __NR_sys_kexec_load */
|
||||
#define __NR_kexec_load 284
|
||||
#define __NR_waitid 285
|
||||
#define __NR_add_key 286
|
||||
#define __NR_request_key 287
|
||||
|
|
@ -352,9 +353,54 @@
|
|||
#define __NR_shmdt 340
|
||||
#define __NR_shmget 341
|
||||
|
||||
#define __NR_syscall 342
|
||||
#define __NR_splice 342
|
||||
#define __NR_sync_file_range 343
|
||||
#define __NR_tee 344
|
||||
#define __NR_vmsplice 345
|
||||
|
||||
#define __NR_epoll_pwait 346
|
||||
#define __NR_utimensat 347
|
||||
#define __NR_signalfd 348
|
||||
#define __NR_timerfd 349
|
||||
#define __NR_eventfd 350
|
||||
#define __NR_pread64 351
|
||||
#define __NR_pwrite64 352
|
||||
#define __NR_fadvise64 353
|
||||
#define __NR_set_robust_list 354
|
||||
#define __NR_get_robust_list 355
|
||||
#define __NR_fallocate 356
|
||||
|
||||
#define __NR_syscall 357
|
||||
#define NR_syscalls __NR_syscall
|
||||
|
||||
/* Old optional stuff no one actually uses */
|
||||
#define __IGNORE_sysfs
|
||||
#define __IGNORE_uselib
|
||||
|
||||
/* Implement the newer interfaces */
|
||||
#define __IGNORE_mmap
|
||||
#define __IGNORE_poll
|
||||
#define __IGNORE_select
|
||||
#define __IGNORE_utime
|
||||
|
||||
/* Not relevant on no-mmu */
|
||||
#define __IGNORE_swapon
|
||||
#define __IGNORE_swapoff
|
||||
#define __IGNORE_msync
|
||||
#define __IGNORE_mlock
|
||||
#define __IGNORE_munlock
|
||||
#define __IGNORE_mlockall
|
||||
#define __IGNORE_munlockall
|
||||
#define __IGNORE_mincore
|
||||
#define __IGNORE_madvise
|
||||
#define __IGNORE_remap_file_pages
|
||||
#define __IGNORE_mbind
|
||||
#define __IGNORE_get_mempolicy
|
||||
#define __IGNORE_set_mempolicy
|
||||
#define __IGNORE_migrate_pages
|
||||
#define __IGNORE_move_pages
|
||||
#define __IGNORE_getcpu
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_STAT64
|
||||
|
|
|
|||
|
|
@ -63,6 +63,8 @@ static inline int kernel_termios_to_user_termio(struct termio __user *termio,
|
|||
|
||||
#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
|
||||
#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
|
||||
#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))
|
||||
#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios))
|
||||
|
||||
#endif /* __ARCH_TERMIO_GETPUT */
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#define flat_argvp_envp_on_stack() 1
|
||||
#define flat_old_ram_flag(flags) 1
|
||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||
#define flat_set_persistent(relval, p) 0
|
||||
|
||||
/*
|
||||
* on the H8 a couple of the relocations have an instruction in the
|
||||
|
|
@ -18,7 +19,7 @@
|
|||
*/
|
||||
|
||||
#define flat_get_relocate_addr(rel) (rel)
|
||||
#define flat_get_addr_from_rp(rp, relval, flags) \
|
||||
#define flat_get_addr_from_rp(rp, relval, flags, persistent) \
|
||||
(get_unaligned(rp) & ((flags & FLAT_FLAG_GOTPIC) ? 0xffffffff: 0x00ffffff))
|
||||
#define flat_put_addr_at_rp(rp, addr, rel) \
|
||||
put_unaligned (((*(char *)(rp)) << 24) | ((addr) & 0x00ffffff), rp)
|
||||
|
|
|
|||
|
|
@ -112,6 +112,9 @@ extern void __iomem * __ioremap(unsigned long offset, unsigned long size, unsign
|
|||
* writew/writel functions and the other mmio helpers. The returned
|
||||
* address is not guaranteed to be usable directly as a virtual
|
||||
* address.
|
||||
*
|
||||
* If the area you are trying to map is a PCI BAR you should have a
|
||||
* look at pci_iomap().
|
||||
*/
|
||||
|
||||
static inline void __iomem * ioremap(unsigned long offset, unsigned long size)
|
||||
|
|
|
|||
|
|
@ -150,7 +150,6 @@ extern int (*ioapic_renumber_irq)(int ioapic, int irq);
|
|||
|
||||
#else /* !CONFIG_X86_IO_APIC */
|
||||
#define io_apic_assign_pci_irqs 0
|
||||
static inline void disable_ioapic_setup(void) { }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -214,11 +214,6 @@ static inline unsigned long get_limit(unsigned long segment)
|
|||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Actually only lfence would be needed for mb() because all stores done
|
||||
* by the kernel should be already ordered. But keep a full barrier for now.
|
||||
*/
|
||||
|
||||
#define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2)
|
||||
#define rmb() alternative("lock; addl $0,0(%%esp)", "lfence", X86_FEATURE_XMM2)
|
||||
|
||||
|
|
|
|||
16
include/asm-ia64/hpsim.h
Normal file
16
include/asm-ia64/hpsim.h
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef _ASMIA64_HPSIM_H
|
||||
#define _ASMIA64_HPSIM_H
|
||||
|
||||
#ifndef CONFIG_HP_SIMSERIAL_CONSOLE
|
||||
static inline int simcons_register(void) { return 1; }
|
||||
#else
|
||||
int simcons_register(void);
|
||||
#endif
|
||||
|
||||
struct tty_driver;
|
||||
extern struct tty_driver *hp_simserial_driver;
|
||||
|
||||
void ia64_ssc_connect_irq(long intr, long irq);
|
||||
void ia64_ctl_trace(long on);
|
||||
|
||||
#endif
|
||||
|
|
@ -81,5 +81,6 @@ extern u8 sn_sharing_domain_size;
|
|||
extern u8 sn_region_size;
|
||||
|
||||
extern void sn_flush_all_caches(long addr, long bytes);
|
||||
extern bool sn_cpu_disable_allowed(int cpu);
|
||||
|
||||
#endif /* _ASM_IA64_SN_ARCH_H */
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ extern u64 sn_intr_alloc(nasid_t, int,
|
|||
int, nasid_t, int);
|
||||
extern void sn_intr_free(nasid_t, int, struct sn_irq_info *);
|
||||
extern struct sn_irq_info *sn_retarget_vector(struct sn_irq_info *, nasid_t, int);
|
||||
extern void sn_set_err_irq_affinity(unsigned int);
|
||||
extern struct list_head **sn_irq_lh;
|
||||
|
||||
#define CPU_VECTOR_TO_IRQ(cpuid,vector) (vector)
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ extern int sn_prom_feature_available(int id);
|
|||
#define PRF_PAL_CACHE_FLUSH_SAFE 0
|
||||
#define PRF_DEVICE_FLUSH_LIST 1
|
||||
#define PRF_HOTPLUG_SUPPORT 2
|
||||
#define PRF_CPU_DISABLE_SUPPORT 3
|
||||
|
||||
/* --------------------- OS Features -------------------------------*/
|
||||
|
||||
|
|
|
|||
|
|
@ -52,27 +52,27 @@
|
|||
.endm
|
||||
|
||||
#if !(defined(CONFIG_CHIP_M32102) || defined(CONFIG_CHIP_M32104))
|
||||
#define STI(reg) STI_M reg
|
||||
.macro STI_M reg
|
||||
#define ENABLE_INTERRUPTS(reg) ENABLE_INTERRUPTS reg
|
||||
.macro ENABLE_INTERRUPTS reg
|
||||
setpsw #0x40 -> nop
|
||||
; WORKAROUND: "-> nop" is a workaround for the M32700(TS1).
|
||||
.endm
|
||||
|
||||
#define CLI(reg) CLI_M reg
|
||||
.macro CLI_M reg
|
||||
#define DISABLE_INTERRUPTS(reg) DISABLE_INTERRUPTS reg
|
||||
.macro DISABLE_INTERRUPTS reg
|
||||
clrpsw #0x40 -> nop
|
||||
; WORKAROUND: "-> nop" is a workaround for the M32700(TS1).
|
||||
.endm
|
||||
#else /* CONFIG_CHIP_M32102 || CONFIG_CHIP_M32104 */
|
||||
#define STI(reg) STI_M reg
|
||||
.macro STI_M reg
|
||||
#define ENABLE_INTERRUPTS(reg) ENABLE_INTERRUPTS reg
|
||||
.macro ENABLE_INTERRUPTS reg
|
||||
mvfc \reg, psw
|
||||
or3 \reg, \reg, #0x0040
|
||||
mvtc \reg, psw
|
||||
.endm
|
||||
|
||||
#define CLI(reg) CLI_M reg
|
||||
.macro CLI_M reg
|
||||
#define DISABLE_INTERRUPTS(reg) DISABLE_INTERRUPTS reg
|
||||
.macro DISABLE_INTERRUPTS reg
|
||||
mvfc \reg, psw
|
||||
and3 \reg, \reg, #0xffbf
|
||||
mvtc \reg, psw
|
||||
|
|
|
|||
|
|
@ -15,9 +15,10 @@
|
|||
#define flat_stack_align(sp) (*sp += (*sp & 3 ? (4 - (*sp & 3)): 0))
|
||||
#define flat_argvp_envp_on_stack() 0
|
||||
#define flat_old_ram_flag(flags) (flags)
|
||||
#define flat_set_persistent(relval, p) 0
|
||||
#define flat_reloc_valid(reloc, size) \
|
||||
(((reloc) - textlen_for_m32r_lo16_data) <= (size))
|
||||
#define flat_get_addr_from_rp(rp, relval, flags) \
|
||||
#define flat_get_addr_from_rp(rp, relval, flags, persistent) \
|
||||
m32r_flat_get_addr_from_rp(rp, relval, (text_len) )
|
||||
|
||||
#define flat_put_addr_at_rp(rp, addr, relval) \
|
||||
|
|
|
|||
|
|
@ -22,12 +22,26 @@
|
|||
#include <asm/m32700ut/m32700ut_pld.h>
|
||||
#include <asm/m32700ut/m32700ut_lan.h>
|
||||
#include <asm/m32700ut/m32700ut_lcd.h>
|
||||
/* for ei_handler:linux/arch/m32r/kernel/entry.S */
|
||||
#define M32R_INT1ICU_ISTS PLD_ICUISTS
|
||||
#define M32R_INT1ICU_IRQ_BASE M32700UT_PLD_IRQ_BASE
|
||||
#define M32R_INT0ICU_ISTS M32700UT_LAN_ICUISTS
|
||||
#define M32R_INT0ICU_IRQ_BASE M32700UT_LAN_PLD_IRQ_BASE
|
||||
#define M32R_INT2ICU_ISTS M32700UT_LCD_ICUISTS
|
||||
#define M32R_INT2ICU_IRQ_BASE M32700UT_LCD_PLD_IRQ_BASE
|
||||
#endif /* CONFIG_PLAT_M32700UT */
|
||||
|
||||
#if defined(CONFIG_PLAT_OPSPUT)
|
||||
#include <asm/opsput/opsput_pld.h>
|
||||
#include <asm/opsput/opsput_lan.h>
|
||||
#include <asm/opsput/opsput_lcd.h>
|
||||
/* for ei_handler:linux/arch/m32r/kernel/entry.S */
|
||||
#define M32R_INT1ICU_ISTS PLD_ICUISTS
|
||||
#define M32R_INT1ICU_IRQ_BASE OPSPUT_PLD_IRQ_BASE
|
||||
#define M32R_INT0ICU_ISTS OPSPUT_LAN_ICUISTS
|
||||
#define M32R_INT0ICU_IRQ_BASE OPSPUT_LAN_PLD_IRQ_BASE
|
||||
#define M32R_INT2ICU_ISTS OPSPUT_LCD_ICUISTS
|
||||
#define M32R_INT2ICU_IRQ_BASE OPSPUT_LCD_PLD_IRQ_BASE
|
||||
#endif /* CONFIG_PLAT_OPSPUT */
|
||||
|
||||
#if defined(CONFIG_PLAT_MAPPI2)
|
||||
|
|
@ -40,10 +54,16 @@
|
|||
|
||||
#if defined(CONFIG_PLAT_USRV)
|
||||
#include <asm/m32700ut/m32700ut_pld.h>
|
||||
/* for ei_handler:linux/arch/m32r/kernel/entry.S */
|
||||
#define M32R_INT1ICU_ISTS PLD_ICUISTS
|
||||
#define M32R_INT1ICU_IRQ_BASE M32700UT_PLD_IRQ_BASE
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_PLAT_M32104UT)
|
||||
#include <asm/m32104ut/m32104ut_pld.h>
|
||||
/* for ei_handler:linux/arch/m32r/kernel/entry.S */
|
||||
#define M32R_INT1ICU_ISTS PLD_ICUISTS
|
||||
#define M32R_INT1ICU_IRQ_BASE M32104UT_PLD_IRQ_BASE
|
||||
#endif /* CONFIG_PLAT_M32104 */
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -313,10 +313,20 @@
|
|||
#define __NR_tee 308
|
||||
#define __NR_vmsplice 309
|
||||
#define __NR_move_pages 310
|
||||
#define __NR_sched_setaffinity 311
|
||||
#define __NR_sched_getaffinity 312
|
||||
#define __NR_kexec_load 313
|
||||
#define __NR_getcpu 314
|
||||
#define __NR_epoll_pwait 315
|
||||
#define __NR_utimensat 316
|
||||
#define __NR_signalfd 317
|
||||
#define __NR_timerfd 318
|
||||
#define __NR_eventfd 319
|
||||
#define __NR_fallocate 320
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define NR_syscalls 311
|
||||
#define NR_syscalls 321
|
||||
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
|
|
|
|||
|
|
@ -9,8 +9,9 @@
|
|||
#define flat_argvp_envp_on_stack() 1
|
||||
#define flat_old_ram_flag(flags) (flags)
|
||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||
#define flat_get_addr_from_rp(rp, relval, flags) get_unaligned(rp)
|
||||
#define flat_get_addr_from_rp(rp, relval, flags, p) get_unaligned(rp)
|
||||
#define flat_put_addr_at_rp(rp, val, relval) put_unaligned(val,rp)
|
||||
#define flat_get_relocate_addr(rel) (rel)
|
||||
#define flat_set_persistent(relval, p) 0
|
||||
|
||||
#endif /* __M68KNOMMU_FLAT_H__ */
|
||||
|
|
|
|||
|
|
@ -65,4 +65,6 @@ extern unsigned int kobjsize(const void *objp);
|
|||
#define VMALLOC_START 0
|
||||
#define VMALLOC_END 0xffffffff
|
||||
|
||||
#include <asm-generic/pgtable.h>
|
||||
|
||||
#endif /* _M68KNOMMU_PGTABLE_H */
|
||||
|
|
|
|||
|
|
@ -314,10 +314,20 @@
|
|||
#define __NR_tee 308
|
||||
#define __NR_vmsplice 309
|
||||
#define __NR_move_pages 310
|
||||
#define __NR_sched_setaffinity 311
|
||||
#define __NR_sched_getaffinity 312
|
||||
#define __NR_kexec_load 313
|
||||
#define __NR_getcpu 314
|
||||
#define __NR_epoll_pwait 315
|
||||
#define __NR_utimensat 316
|
||||
#define __NR_signalfd 317
|
||||
#define __NR_timerfd 318
|
||||
#define __NR_eventfd 319
|
||||
#define __NR_fallocate 320
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define NR_syscalls 311
|
||||
#define NR_syscalls 321
|
||||
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ struct bcache_ops {
|
|||
};
|
||||
|
||||
extern void indy_sc_init(void);
|
||||
extern void sni_pcimt_sc_init(void);
|
||||
|
||||
#ifdef CONFIG_BOARD_SCACHE
|
||||
|
||||
|
|
|
|||
107
include/asm-mips/cmpxchg.h
Normal file
107
include/asm-mips/cmpxchg.h
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2003, 06, 07 by Ralf Baechle (ralf@linux-mips.org)
|
||||
*/
|
||||
#ifndef __ASM_CMPXCHG_H
|
||||
#define __ASM_CMPXCHG_H
|
||||
|
||||
#include <linux/irqflags.h>
|
||||
|
||||
#define __HAVE_ARCH_CMPXCHG 1
|
||||
|
||||
#define __cmpxchg_asm(ld, st, m, old, new) \
|
||||
({ \
|
||||
__typeof(*(m)) __ret; \
|
||||
\
|
||||
if (cpu_has_llsc && R10000_LLSC_WAR) { \
|
||||
__asm__ __volatile__( \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" .set mips3 \n" \
|
||||
"1: " ld " %0, %2 # __cmpxchg_asm \n" \
|
||||
" bne %0, %z3, 2f \n" \
|
||||
" .set mips0 \n" \
|
||||
" move $1, %z4 \n" \
|
||||
" .set mips3 \n" \
|
||||
" " st " $1, %1 \n" \
|
||||
" beqzl $1, 1b \n" \
|
||||
"2: \n" \
|
||||
" .set pop \n" \
|
||||
: "=&r" (__ret), "=R" (*m) \
|
||||
: "R" (*m), "Jr" (old), "Jr" (new) \
|
||||
: "memory"); \
|
||||
} else if (cpu_has_llsc) { \
|
||||
__asm__ __volatile__( \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" .set mips3 \n" \
|
||||
"1: " ld " %0, %2 # __cmpxchg_asm \n" \
|
||||
" bne %0, %z3, 2f \n" \
|
||||
" .set mips0 \n" \
|
||||
" move $1, %z4 \n" \
|
||||
" .set mips3 \n" \
|
||||
" " st " $1, %1 \n" \
|
||||
" beqz $1, 3f \n" \
|
||||
"2: \n" \
|
||||
" .subsection 2 \n" \
|
||||
"3: b 1b \n" \
|
||||
" .previous \n" \
|
||||
" .set pop \n" \
|
||||
: "=&r" (__ret), "=R" (*m) \
|
||||
: "R" (*m), "Jr" (old), "Jr" (new) \
|
||||
: "memory"); \
|
||||
} else { \
|
||||
unsigned long __flags; \
|
||||
\
|
||||
raw_local_irq_save(__flags); \
|
||||
__ret = *m; \
|
||||
if (__ret == old) \
|
||||
*m = new; \
|
||||
raw_local_irq_restore(__flags); \
|
||||
} \
|
||||
\
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/*
|
||||
* This function doesn't exist, so you'll get a linker error
|
||||
* if something tries to do an invalid cmpxchg().
|
||||
*/
|
||||
extern void __cmpxchg_called_with_bad_pointer(void);
|
||||
|
||||
#define __cmpxchg(ptr,old,new,barrier) \
|
||||
({ \
|
||||
__typeof__(ptr) __ptr = (ptr); \
|
||||
__typeof__(*(ptr)) __old = (old); \
|
||||
__typeof__(*(ptr)) __new = (new); \
|
||||
__typeof__(*(ptr)) __res = 0; \
|
||||
\
|
||||
barrier; \
|
||||
\
|
||||
switch (sizeof(*(__ptr))) { \
|
||||
case 4: \
|
||||
__res = __cmpxchg_asm("ll", "sc", __ptr, __old, __new); \
|
||||
break; \
|
||||
case 8: \
|
||||
if (sizeof(long) == 8) { \
|
||||
__res = __cmpxchg_asm("lld", "scd", __ptr, \
|
||||
__old, __new); \
|
||||
break; \
|
||||
} \
|
||||
default: \
|
||||
__cmpxchg_called_with_bad_pointer(); \
|
||||
break; \
|
||||
} \
|
||||
\
|
||||
barrier; \
|
||||
\
|
||||
__res; \
|
||||
})
|
||||
|
||||
#define cmpxchg(ptr, old, new) __cmpxchg(ptr, old, new, smp_llsc_mb())
|
||||
#define cmpxchg_local(ptr, old, new) __cmpxchg(ptr, old, new,)
|
||||
|
||||
#endif /* __ASM_CMPXCHG_H */
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2004 Maciej W. Rozycki
|
||||
* Copyright (C) 2004, 2007 Maciej W. Rozycki
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
|
|
@ -9,8 +9,10 @@
|
|||
#define _ASM_COMPILER_H
|
||||
|
||||
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
|
||||
#define GCC_IMM_ASM "n"
|
||||
#define GCC_REG_ACCUM "$0"
|
||||
#else
|
||||
#define GCC_IMM_ASM "rn"
|
||||
#define GCC_REG_ACCUM "accum"
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -9,8 +9,7 @@ static inline void atomic_scrub(void *va, u32 size)
|
|||
unsigned long temp;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < size / sizeof(unsigned long); i++, virt_addr++) {
|
||||
|
||||
for (i = 0; i < size / sizeof(unsigned long); i++) {
|
||||
/*
|
||||
* Very carefully read and write to memory atomically
|
||||
* so we are interrupt, DMA and SMP safe.
|
||||
|
|
@ -19,16 +18,16 @@ static inline void atomic_scrub(void *va, u32 size)
|
|||
*/
|
||||
|
||||
__asm__ __volatile__ (
|
||||
" .set mips3 \n"
|
||||
"1: ll %0, %1 # atomic_add \n"
|
||||
" ll %0, %1 # atomic_add \n"
|
||||
" addu %0, $0 \n"
|
||||
" sc %0, %1 \n"
|
||||
" beqz %0, 1b \n"
|
||||
" .set mips0 \n"
|
||||
" .set mips2 \n"
|
||||
"1: ll %0, %1 # atomic_scrub \n"
|
||||
" addu %0, $0 \n"
|
||||
" sc %0, %1 \n"
|
||||
" beqz %0, 1b \n"
|
||||
" .set mips0 \n"
|
||||
: "=&r" (temp), "=m" (*virt_addr)
|
||||
: "m" (*virt_addr));
|
||||
|
||||
virt_addr++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#define O_SYNC 0x0010
|
||||
#define O_NONBLOCK 0x0080
|
||||
#define O_CREAT 0x0100 /* not fcntl */
|
||||
#define O_TRUNC 0x0200 /* not fcntl */
|
||||
#define O_EXCL 0x0400 /* not fcntl */
|
||||
#define O_NOCTTY 0x0800 /* not fcntl */
|
||||
#define FASYNC 0x1000 /* fcntl, for BSD compatibility */
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -172,6 +172,7 @@ ASMMACRO(tlb_probe_hazard,
|
|||
nop; nop; nop
|
||||
)
|
||||
ASMMACRO(irq_enable_hazard,
|
||||
_ssnop; _ssnop; _ssnop;
|
||||
)
|
||||
ASMMACRO(irq_disable_hazard,
|
||||
nop; nop; nop
|
||||
|
|
|
|||
|
|
@ -77,6 +77,10 @@
|
|||
#define TIOCSBRK 0x5427 /* BSD compatibility */
|
||||
#define TIOCCBRK 0x5428 /* BSD compatibility */
|
||||
#define TIOCGSID 0x7416 /* Return the session ID of FD */
|
||||
#define TCGETS2 _IOR('T',0x2A, struct termios2)
|
||||
#define TCSETS2 _IOW('T',0x2B, struct termios2)
|
||||
#define TCSETSW2 _IOW('T',0x2C, struct termios2)
|
||||
#define TCSETSF2 _IOW('T',0x2D, struct termios2)
|
||||
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
|
||||
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,30 @@ static inline int irq_canonicalize(int irq)
|
|||
#define irq_canonicalize(irq) (irq) /* Sane hardware, sane code ... */
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MIPS_MT_SMTC
|
||||
|
||||
struct irqaction;
|
||||
|
||||
extern unsigned long irq_hwmask[];
|
||||
extern int setup_irq_smtc(unsigned int irq, struct irqaction * new,
|
||||
unsigned long hwmask);
|
||||
|
||||
static inline void smtc_im_ack_irq(unsigned int irq)
|
||||
{
|
||||
if (irq_hwmask[irq] & ST0_IM)
|
||||
set_c0_status(irq_hwmask[irq] & ST0_IM);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline void smtc_im_ack_irq(unsigned int irq)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* CONFIG_MIPS_MT_SMTC */
|
||||
|
||||
#ifdef CONFIG_MIPS_MT_SMTC_IM_BACKSTOP
|
||||
|
||||
/*
|
||||
* Clear interrupt mask handling "backstop" if irq_hwmask
|
||||
* entry so indicates. This implies that the ack() or end()
|
||||
|
|
@ -38,6 +61,7 @@ do { \
|
|||
~(irq_hwmask[irq] & 0x0000ff00)); \
|
||||
} while (0)
|
||||
#else
|
||||
|
||||
#define __DO_IRQ_SMTC_HOOK(irq) do { } while (0)
|
||||
#endif
|
||||
|
||||
|
|
@ -60,14 +84,6 @@ do { \
|
|||
extern void arch_init_irq(void);
|
||||
extern void spurious_interrupt(void);
|
||||
|
||||
#ifdef CONFIG_MIPS_MT_SMTC
|
||||
struct irqaction;
|
||||
|
||||
extern unsigned long irq_hwmask[];
|
||||
extern int setup_irq_smtc(unsigned int irq, struct irqaction * new,
|
||||
unsigned long hwmask);
|
||||
#endif /* CONFIG_MIPS_MT_SMTC */
|
||||
|
||||
extern int allocate_irqno(void);
|
||||
extern void alloc_legacy_irqno(void);
|
||||
extern void free_irqno(unsigned int irq);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#include <asm/jmr3927/tx3927.h>
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/txx9irq.h>
|
||||
|
||||
/* CS */
|
||||
#define JMR3927_ROMCE0 0x1fc00000 /* 4M */
|
||||
|
|
@ -115,7 +116,7 @@
|
|||
#define JMR3927_NR_IRQ_IRC 16 /* On-Chip IRC */
|
||||
#define JMR3927_NR_IRQ_IOC 8 /* PCI/MODEM/INT[6:7] */
|
||||
|
||||
#define JMR3927_IRQ_IRC 16
|
||||
#define JMR3927_IRQ_IRC TXX9_IRQ_BASE
|
||||
#define JMR3927_IRQ_IOC (JMR3927_IRQ_IRC + JMR3927_NR_IRQ_IRC)
|
||||
#define JMR3927_IRQ_END (JMR3927_IRQ_IOC + JMR3927_NR_IRQ_IOC)
|
||||
|
||||
|
|
|
|||
|
|
@ -50,21 +50,6 @@ struct tx3927_dma_reg {
|
|||
volatile unsigned long unused0;
|
||||
};
|
||||
|
||||
struct tx3927_irc_reg {
|
||||
volatile unsigned long cer;
|
||||
volatile unsigned long cr[2];
|
||||
volatile unsigned long unused0;
|
||||
volatile unsigned long ilr[8];
|
||||
volatile unsigned long unused1[4];
|
||||
volatile unsigned long imr;
|
||||
volatile unsigned long unused2[7];
|
||||
volatile unsigned long scr;
|
||||
volatile unsigned long unused3[7];
|
||||
volatile unsigned long ssr;
|
||||
volatile unsigned long unused4[7];
|
||||
volatile unsigned long csr;
|
||||
};
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#ifdef __BIG_ENDIAN
|
||||
|
|
@ -225,26 +210,6 @@ struct tx3927_ccfg_reg {
|
|||
/*
|
||||
* IRC
|
||||
*/
|
||||
#define TX3927_IR_MAX_LEVEL 7
|
||||
|
||||
/* IRCER : Int. Control Enable */
|
||||
#define TX3927_IRCER_ICE 0x00000001
|
||||
|
||||
/* IRCR : Int. Control */
|
||||
#define TX3927_IRCR_LOW 0x00000000
|
||||
#define TX3927_IRCR_HIGH 0x00000001
|
||||
#define TX3927_IRCR_DOWN 0x00000002
|
||||
#define TX3927_IRCR_UP 0x00000003
|
||||
|
||||
/* IRSCR : Int. Status Control */
|
||||
#define TX3927_IRSCR_EIClrE 0x00000100
|
||||
#define TX3927_IRSCR_EIClr_MASK 0x0000000f
|
||||
|
||||
/* IRCSR : Int. Current Status */
|
||||
#define TX3927_IRCSR_IF 0x00010000
|
||||
#define TX3927_IRCSR_ILV_MASK 0x00000700
|
||||
#define TX3927_IRCSR_IVL_MASK 0x0000001f
|
||||
|
||||
#define TX3927_IR_INT0 0
|
||||
#define TX3927_IR_INT1 1
|
||||
#define TX3927_IR_INT2 2
|
||||
|
|
@ -347,7 +312,6 @@ struct tx3927_ccfg_reg {
|
|||
#define tx3927_sdramcptr ((struct tx3927_sdramc_reg *)TX3927_SDRAMC_REG)
|
||||
#define tx3927_romcptr ((struct tx3927_romc_reg *)TX3927_ROMC_REG)
|
||||
#define tx3927_dmaptr ((struct tx3927_dma_reg *)TX3927_DMA_REG)
|
||||
#define tx3927_ircptr ((struct tx3927_irc_reg *)TX3927_IRC_REG)
|
||||
#define tx3927_pcicptr ((struct tx3927_pcic_reg *)TX3927_PCIC_REG)
|
||||
#define tx3927_ccfgptr ((struct tx3927_ccfg_reg *)TX3927_CCFG_REG)
|
||||
#define tx3927_tmrptr(ch) ((struct txx927_tmr_reg *)TX3927_TMR_REG(ch))
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <linux/percpu.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/cmpxchg.h>
|
||||
#include <asm/war.h>
|
||||
|
||||
typedef struct
|
||||
|
|
@ -114,68 +115,6 @@ static __inline__ long local_sub_return(long i, local_t * l)
|
|||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* local_sub_if_positive - conditionally subtract integer from atomic variable
|
||||
* @i: integer value to subtract
|
||||
* @l: pointer of type local_t
|
||||
*
|
||||
* Atomically test @l and subtract @i if @l is greater or equal than @i.
|
||||
* The function returns the old value of @l minus @i.
|
||||
*/
|
||||
static __inline__ long local_sub_if_positive(long i, local_t * l)
|
||||
{
|
||||
unsigned long result;
|
||||
|
||||
if (cpu_has_llsc && R10000_LLSC_WAR) {
|
||||
unsigned long temp;
|
||||
|
||||
__asm__ __volatile__(
|
||||
" .set mips3 \n"
|
||||
"1:" __LL "%1, %2 # local_sub_if_positive\n"
|
||||
" dsubu %0, %1, %3 \n"
|
||||
" bltz %0, 1f \n"
|
||||
__SC "%0, %2 \n"
|
||||
" .set noreorder \n"
|
||||
" beqzl %0, 1b \n"
|
||||
" dsubu %0, %1, %3 \n"
|
||||
" .set reorder \n"
|
||||
"1: \n"
|
||||
" .set mips0 \n"
|
||||
: "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
|
||||
: "Ir" (i), "m" (l->a.counter)
|
||||
: "memory");
|
||||
} else if (cpu_has_llsc) {
|
||||
unsigned long temp;
|
||||
|
||||
__asm__ __volatile__(
|
||||
" .set mips3 \n"
|
||||
"1:" __LL "%1, %2 # local_sub_if_positive\n"
|
||||
" dsubu %0, %1, %3 \n"
|
||||
" bltz %0, 1f \n"
|
||||
__SC "%0, %2 \n"
|
||||
" .set noreorder \n"
|
||||
" beqz %0, 1b \n"
|
||||
" dsubu %0, %1, %3 \n"
|
||||
" .set reorder \n"
|
||||
"1: \n"
|
||||
" .set mips0 \n"
|
||||
: "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
|
||||
: "Ir" (i), "m" (l->a.counter)
|
||||
: "memory");
|
||||
} else {
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
result = l->a.counter;
|
||||
result -= i;
|
||||
if (result >= 0)
|
||||
l->a.counter = result;
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#define local_cmpxchg(l, o, n) \
|
||||
((long)cmpxchg_local(&((l)->a.counter), (o), (n)))
|
||||
#define local_xchg(l, n) (xchg_local(&((l)->a.counter),(n)))
|
||||
|
|
@ -233,12 +172,6 @@ static __inline__ long local_sub_if_positive(long i, local_t * l)
|
|||
*/
|
||||
#define local_dec_and_test(l) (local_sub_return(1, (l)) == 0)
|
||||
|
||||
/*
|
||||
* local_dec_if_positive - decrement by 1 if old value positive
|
||||
* @l: pointer of type local_t
|
||||
*/
|
||||
#define local_dec_if_positive(l) local_sub_if_positive(1, l)
|
||||
|
||||
/*
|
||||
* local_add_negative - add and test if negative
|
||||
* @l: pointer of type local_t
|
||||
|
|
|
|||
|
|
@ -33,13 +33,24 @@ static __inline__ int ide_probe_legacy(void)
|
|||
{
|
||||
#ifdef CONFIG_PCI
|
||||
struct pci_dev *dev;
|
||||
if ((dev = pci_get_class(PCI_CLASS_BRIDGE_EISA << 8, NULL)) != NULL ||
|
||||
(dev = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL)) != NULL) {
|
||||
pci_dev_put(dev);
|
||||
|
||||
return 1;
|
||||
}
|
||||
/*
|
||||
* This can be called on the ide_setup() path, super-early in
|
||||
* boot. But the down_read() will enable local interrupts,
|
||||
* which can cause some machines to crash. So here we detect
|
||||
* and flag that situation and bail out early.
|
||||
*/
|
||||
if (no_pci_devices())
|
||||
return 0;
|
||||
dev = pci_get_class(PCI_CLASS_BRIDGE_EISA << 8, NULL);
|
||||
if (dev)
|
||||
goto found;
|
||||
dev = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
|
||||
if (dev)
|
||||
goto found;
|
||||
return 0;
|
||||
found:
|
||||
pci_dev_put(dev);
|
||||
return 1;
|
||||
#elif defined(CONFIG_EISA) || defined(CONFIG_ISA)
|
||||
return 1;
|
||||
#else
|
||||
|
|
@ -49,48 +60,42 @@ static __inline__ int ide_probe_legacy(void)
|
|||
|
||||
static __inline__ int ide_default_irq(unsigned long base)
|
||||
{
|
||||
if (ide_probe_legacy())
|
||||
switch (base) {
|
||||
case 0x1f0:
|
||||
return 14;
|
||||
case 0x170:
|
||||
return 15;
|
||||
case 0x1e8:
|
||||
return 11;
|
||||
case 0x168:
|
||||
return 10;
|
||||
case 0x1e0:
|
||||
return 8;
|
||||
case 0x160:
|
||||
return 12;
|
||||
switch (base) {
|
||||
case 0x1f0: return 14;
|
||||
case 0x170: return 15;
|
||||
case 0x1e8: return 11;
|
||||
case 0x168: return 10;
|
||||
case 0x1e0: return 8;
|
||||
case 0x160: return 12;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static __inline__ unsigned long ide_default_io_base(int index)
|
||||
{
|
||||
if (ide_probe_legacy())
|
||||
switch (index) {
|
||||
case 0:
|
||||
return 0x1f0;
|
||||
case 1:
|
||||
return 0x170;
|
||||
case 2:
|
||||
return 0x1e8;
|
||||
case 3:
|
||||
return 0x168;
|
||||
case 4:
|
||||
return 0x1e0;
|
||||
case 5:
|
||||
return 0x160;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
if (!ide_probe_legacy())
|
||||
return 0;
|
||||
/*
|
||||
* If PCI is present then it is not safe to poke around
|
||||
* the other legacy IDE ports. Only 0x1f0 and 0x170 are
|
||||
* defined compatibility mode ports for PCI. A user can
|
||||
* override this using ide= but we must default safe.
|
||||
*/
|
||||
if (no_pci_devices()) {
|
||||
switch (index) {
|
||||
case 2: return 0x1e8;
|
||||
case 3: return 0x168;
|
||||
case 4: return 0x1e0;
|
||||
case 5: return 0x160;
|
||||
}
|
||||
}
|
||||
switch (index) {
|
||||
case 0: return 0x1f0;
|
||||
case 1: return 0x170;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#define IDE_ARCH_OBSOLETE_INIT
|
||||
|
|
|
|||
|
|
@ -1,30 +0,0 @@
|
|||
/*
|
||||
* Copyright 2001 MontaVista Software Inc.
|
||||
* Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
|
||||
*
|
||||
* This program 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 of the License, or (at your
|
||||
* option) any later version.
|
||||
*/
|
||||
#ifndef _ASM_GT64120_MOMENCO_OCELOT_GT64120_DEP_H
|
||||
#define _ASM_GT64120_MOMENCO_OCELOT_GT64120_DEP_H
|
||||
|
||||
/*
|
||||
* PCI address allocation
|
||||
*/
|
||||
#define GT_PCI_MEM_BASE (0x22000000UL)
|
||||
#define GT_PCI_MEM_SIZE GT_DEF_PCI0_MEM0_SIZE
|
||||
#define GT_PCI_IO_BASE (0x20000000UL)
|
||||
#define GT_PCI_IO_SIZE GT_DEF_PCI0_IO_SIZE
|
||||
|
||||
extern unsigned long gt64120_base;
|
||||
|
||||
#define GT64120_BASE (gt64120_base)
|
||||
|
||||
/*
|
||||
* GT timer irq
|
||||
*/
|
||||
#define GT_TIMER 6
|
||||
|
||||
#endif /* _ASM_GT64120_MOMENCO_OCELOT_GT64120_DEP_H */
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2004 by Ralf Baechle
|
||||
*/
|
||||
#ifndef __ASM_MIPS_MARVELL_H
|
||||
#define __ASM_MIPS_MARVELL_H
|
||||
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
extern unsigned long marvell_base;
|
||||
|
||||
/*
|
||||
* Because of an error/peculiarity in the Galileo chip, we need to swap the
|
||||
* bytes when running bigendian.
|
||||
*/
|
||||
#define __MV_READ(ofs) \
|
||||
(*(volatile u32 *)(marvell_base+(ofs)))
|
||||
#define __MV_WRITE(ofs, data) \
|
||||
do { *(volatile u32 *)(marvell_base+(ofs)) = (data); } while (0)
|
||||
|
||||
#define MV_READ(ofs) le32_to_cpu(__MV_READ(ofs))
|
||||
#define MV_WRITE(ofs, data) __MV_WRITE(ofs, cpu_to_le32(data))
|
||||
|
||||
#define MV_READ_16(ofs) \
|
||||
le16_to_cpu(*(volatile u16 *)(marvell_base+(ofs)))
|
||||
#define MV_WRITE_16(ofs, data) \
|
||||
*(volatile u16 *)(marvell_base+(ofs)) = cpu_to_le16(data)
|
||||
|
||||
#define MV_READ_8(ofs) \
|
||||
*(volatile u8 *)(marvell_base+(ofs))
|
||||
#define MV_WRITE_8(ofs, data) \
|
||||
*(volatile u8 *)(marvell_base+(ofs)) = data
|
||||
|
||||
#define MV_SET_REG_BITS(ofs, bits) \
|
||||
(*((volatile u32 *)(marvell_base + (ofs)))) |= ((u32)cpu_to_le32(bits))
|
||||
#define MV_RESET_REG_BITS(ofs, bits) \
|
||||
(*((volatile u32 *)(marvell_base + (ofs)))) &= ~((u32)cpu_to_le32(bits))
|
||||
|
||||
extern struct pci_ops mv_pci_ops;
|
||||
|
||||
struct mv_pci_controller {
|
||||
struct pci_controller pcic;
|
||||
|
||||
/*
|
||||
* GT-64240/MV-64340 specific, per host bus information
|
||||
*/
|
||||
unsigned long config_addr;
|
||||
unsigned long config_vreg;
|
||||
};
|
||||
|
||||
extern void ll_mv64340_irq(void);
|
||||
extern void mv64340_irq_init(unsigned int base);
|
||||
|
||||
#endif /* __ASM_MIPS_MARVELL_H */
|
||||
|
|
@ -142,7 +142,7 @@ typedef struct { unsigned long pgprot; } pgprot_t;
|
|||
/*
|
||||
* __pa()/__va() should be used only during mem init.
|
||||
*/
|
||||
#if defined(CONFIG_64BIT) && !defined(CONFIG_BUILD_ELF64)
|
||||
#ifdef CONFIG_64BIT
|
||||
#define __pa(x) \
|
||||
({ \
|
||||
unsigned long __x = (unsigned long)(x); \
|
||||
|
|
|
|||
|
|
@ -43,11 +43,7 @@ extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
|
|||
*/
|
||||
|
||||
/* PGDIR_SHIFT determines what a third-level page table entry can map */
|
||||
#ifdef CONFIG_64BIT_PHYS_ADDR
|
||||
#define PGDIR_SHIFT 21
|
||||
#else
|
||||
#define PGDIR_SHIFT 22
|
||||
#endif
|
||||
#define PGDIR_SHIFT (2 * PAGE_SHIFT + PTE_ORDER - PTE_T_LOG2)
|
||||
#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
|
||||
#define PGDIR_MASK (~(PGDIR_SIZE-1))
|
||||
|
||||
|
|
@ -55,17 +51,11 @@ extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
|
|||
* Entries per page directory level: we use two-level, so
|
||||
* we don't really have any PUD/PMD directory physically.
|
||||
*/
|
||||
#ifdef CONFIG_64BIT_PHYS_ADDR
|
||||
#define PGD_ORDER 1
|
||||
#define __PGD_ORDER (32 - 3 * PAGE_SHIFT + PGD_T_LOG2 + PTE_T_LOG2)
|
||||
#define PGD_ORDER (__PGD_ORDER >= 0 ? __PGD_ORDER : 0)
|
||||
#define PUD_ORDER aieeee_attempt_to_allocate_pud
|
||||
#define PMD_ORDER 1
|
||||
#define PTE_ORDER 0
|
||||
#else
|
||||
#define PGD_ORDER 0
|
||||
#define PUD_ORDER aieeee_attempt_to_allocate_pud
|
||||
#define PMD_ORDER 1
|
||||
#define PTE_ORDER 0
|
||||
#endif
|
||||
|
||||
#define PTRS_PER_PGD ((PAGE_SIZE << PGD_ORDER) / sizeof(pgd_t))
|
||||
#define PTRS_PER_PTE ((PAGE_SIZE << PTE_ORDER) / sizeof(pte_t))
|
||||
|
|
|
|||
|
|
@ -168,11 +168,15 @@ static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *pt
|
|||
#define set_pud(pudptr, pudval) do { *(pudptr) = (pudval); } while(0)
|
||||
#endif
|
||||
|
||||
#define PGD_T_LOG2 ffz(~sizeof(pgd_t))
|
||||
#define PMD_T_LOG2 ffz(~sizeof(pmd_t))
|
||||
#define PTE_T_LOG2 ffz(~sizeof(pte_t))
|
||||
#define PGD_T_LOG2 (__builtin_ffs(sizeof(pgd_t)) - 1)
|
||||
#define PMD_T_LOG2 (__builtin_ffs(sizeof(pmd_t)) - 1)
|
||||
#define PTE_T_LOG2 (__builtin_ffs(sizeof(pte_t)) - 1)
|
||||
|
||||
extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
||||
/*
|
||||
* We used to declare this array with size but gcc 3.3 and older are not able
|
||||
* to find that this expression is a constant, so the size is dropped.
|
||||
*/
|
||||
extern pgd_t swapper_pg_dir[];
|
||||
|
||||
/*
|
||||
* The following only work if pte_present() is true.
|
||||
|
|
|
|||
|
|
@ -227,10 +227,15 @@
|
|||
(A_BCM1480_DUART(chan) + \
|
||||
BCM1480_DUART_CHANREG_SPACING * 3 + (reg))
|
||||
|
||||
#define DUART_IMRISR_SPACING 0x20
|
||||
#define DUART_INCHNG_SPACING 0x10
|
||||
|
||||
#define R_BCM1480_DUART_IMRREG(chan) \
|
||||
(R_DUART_IMR_A + ((chan) & 1) * DUART_IMRISR_SPACING)
|
||||
#define R_BCM1480_DUART_ISRREG(chan) \
|
||||
(R_DUART_ISR_A + ((chan) & 1) * DUART_IMRISR_SPACING)
|
||||
#define R_BCM1480_DUART_INCHREG(chan) \
|
||||
(R_DUART_IN_CHNG_A + ((chan) & 1) * DUART_INCHNG_SPACING)
|
||||
|
||||
#define A_BCM1480_DUART_IMRREG(chan) \
|
||||
(A_BCM1480_DUART_CTRLREG((chan), R_BCM1480_DUART_IMRREG(chan)))
|
||||
|
|
|
|||
|
|
@ -55,4 +55,14 @@ extern void smtc_boot_secondary(int cpu, struct task_struct *t);
|
|||
|
||||
#define PARKED_INDEX ((unsigned int)0x80000000)
|
||||
|
||||
/*
|
||||
* Define low-level interrupt mask for IPIs, if necessary.
|
||||
* By default, use SW interrupt 1, which requires no external
|
||||
* hardware support, but which works only for single-core
|
||||
* MIPS MT systems.
|
||||
*/
|
||||
#ifndef MIPS_CPU_IPI_IRQ
|
||||
#define MIPS_CPU_IPI_IRQ 1
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_SMTC_MT_H */
|
||||
|
|
|
|||
|
|
@ -9,7 +9,11 @@ extern unsigned long unwind_stack(struct task_struct *task, unsigned long *sp,
|
|||
unsigned long pc, unsigned long *ra);
|
||||
#else
|
||||
#define raw_show_trace 1
|
||||
#define unwind_stack(task, sp, pc, ra) 0
|
||||
static inline unsigned long unwind_stack(struct task_struct *task,
|
||||
unsigned long *sp, unsigned long pc, unsigned long *ra)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static __always_inline void prepare_frametrace(struct pt_regs *regs)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/barrier.h>
|
||||
#include <asm/cmpxchg.h>
|
||||
#include <asm/cpu-features.h>
|
||||
#include <asm/dsp.h>
|
||||
#include <asm/war.h>
|
||||
|
|
@ -194,266 +195,6 @@ static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int siz
|
|||
|
||||
#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
|
||||
|
||||
#define __HAVE_ARCH_CMPXCHG 1
|
||||
|
||||
static inline unsigned long __cmpxchg_u32(volatile int * m, unsigned long old,
|
||||
unsigned long new)
|
||||
{
|
||||
__u32 retval;
|
||||
|
||||
if (cpu_has_llsc && R10000_LLSC_WAR) {
|
||||
__asm__ __volatile__(
|
||||
" .set push \n"
|
||||
" .set noat \n"
|
||||
" .set mips3 \n"
|
||||
"1: ll %0, %2 # __cmpxchg_u32 \n"
|
||||
" bne %0, %z3, 2f \n"
|
||||
" .set mips0 \n"
|
||||
" move $1, %z4 \n"
|
||||
" .set mips3 \n"
|
||||
" sc $1, %1 \n"
|
||||
" beqzl $1, 1b \n"
|
||||
"2: \n"
|
||||
" .set pop \n"
|
||||
: "=&r" (retval), "=R" (*m)
|
||||
: "R" (*m), "Jr" (old), "Jr" (new)
|
||||
: "memory");
|
||||
} else if (cpu_has_llsc) {
|
||||
__asm__ __volatile__(
|
||||
" .set push \n"
|
||||
" .set noat \n"
|
||||
" .set mips3 \n"
|
||||
"1: ll %0, %2 # __cmpxchg_u32 \n"
|
||||
" bne %0, %z3, 2f \n"
|
||||
" .set mips0 \n"
|
||||
" move $1, %z4 \n"
|
||||
" .set mips3 \n"
|
||||
" sc $1, %1 \n"
|
||||
" beqz $1, 3f \n"
|
||||
"2: \n"
|
||||
" .subsection 2 \n"
|
||||
"3: b 1b \n"
|
||||
" .previous \n"
|
||||
" .set pop \n"
|
||||
: "=&r" (retval), "=R" (*m)
|
||||
: "R" (*m), "Jr" (old), "Jr" (new)
|
||||
: "memory");
|
||||
} else {
|
||||
unsigned long flags;
|
||||
|
||||
raw_local_irq_save(flags);
|
||||
retval = *m;
|
||||
if (retval == old)
|
||||
*m = new;
|
||||
raw_local_irq_restore(flags); /* implies memory barrier */
|
||||
}
|
||||
|
||||
smp_llsc_mb();
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline unsigned long __cmpxchg_u32_local(volatile int * m,
|
||||
unsigned long old, unsigned long new)
|
||||
{
|
||||
__u32 retval;
|
||||
|
||||
if (cpu_has_llsc && R10000_LLSC_WAR) {
|
||||
__asm__ __volatile__(
|
||||
" .set push \n"
|
||||
" .set noat \n"
|
||||
" .set mips3 \n"
|
||||
"1: ll %0, %2 # __cmpxchg_u32 \n"
|
||||
" bne %0, %z3, 2f \n"
|
||||
" .set mips0 \n"
|
||||
" move $1, %z4 \n"
|
||||
" .set mips3 \n"
|
||||
" sc $1, %1 \n"
|
||||
" beqzl $1, 1b \n"
|
||||
"2: \n"
|
||||
" .set pop \n"
|
||||
: "=&r" (retval), "=R" (*m)
|
||||
: "R" (*m), "Jr" (old), "Jr" (new)
|
||||
: "memory");
|
||||
} else if (cpu_has_llsc) {
|
||||
__asm__ __volatile__(
|
||||
" .set push \n"
|
||||
" .set noat \n"
|
||||
" .set mips3 \n"
|
||||
"1: ll %0, %2 # __cmpxchg_u32 \n"
|
||||
" bne %0, %z3, 2f \n"
|
||||
" .set mips0 \n"
|
||||
" move $1, %z4 \n"
|
||||
" .set mips3 \n"
|
||||
" sc $1, %1 \n"
|
||||
" beqz $1, 1b \n"
|
||||
"2: \n"
|
||||
" .set pop \n"
|
||||
: "=&r" (retval), "=R" (*m)
|
||||
: "R" (*m), "Jr" (old), "Jr" (new)
|
||||
: "memory");
|
||||
} else {
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
retval = *m;
|
||||
if (retval == old)
|
||||
*m = new;
|
||||
local_irq_restore(flags); /* implies memory barrier */
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
static inline unsigned long __cmpxchg_u64(volatile int * m, unsigned long old,
|
||||
unsigned long new)
|
||||
{
|
||||
__u64 retval;
|
||||
|
||||
if (cpu_has_llsc && R10000_LLSC_WAR) {
|
||||
__asm__ __volatile__(
|
||||
" .set push \n"
|
||||
" .set noat \n"
|
||||
" .set mips3 \n"
|
||||
"1: lld %0, %2 # __cmpxchg_u64 \n"
|
||||
" bne %0, %z3, 2f \n"
|
||||
" move $1, %z4 \n"
|
||||
" scd $1, %1 \n"
|
||||
" beqzl $1, 1b \n"
|
||||
"2: \n"
|
||||
" .set pop \n"
|
||||
: "=&r" (retval), "=R" (*m)
|
||||
: "R" (*m), "Jr" (old), "Jr" (new)
|
||||
: "memory");
|
||||
} else if (cpu_has_llsc) {
|
||||
__asm__ __volatile__(
|
||||
" .set push \n"
|
||||
" .set noat \n"
|
||||
" .set mips3 \n"
|
||||
"1: lld %0, %2 # __cmpxchg_u64 \n"
|
||||
" bne %0, %z3, 2f \n"
|
||||
" move $1, %z4 \n"
|
||||
" scd $1, %1 \n"
|
||||
" beqz $1, 3f \n"
|
||||
"2: \n"
|
||||
" .subsection 2 \n"
|
||||
"3: b 1b \n"
|
||||
" .previous \n"
|
||||
" .set pop \n"
|
||||
: "=&r" (retval), "=R" (*m)
|
||||
: "R" (*m), "Jr" (old), "Jr" (new)
|
||||
: "memory");
|
||||
} else {
|
||||
unsigned long flags;
|
||||
|
||||
raw_local_irq_save(flags);
|
||||
retval = *m;
|
||||
if (retval == old)
|
||||
*m = new;
|
||||
raw_local_irq_restore(flags); /* implies memory barrier */
|
||||
}
|
||||
|
||||
smp_llsc_mb();
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline unsigned long __cmpxchg_u64_local(volatile int * m,
|
||||
unsigned long old, unsigned long new)
|
||||
{
|
||||
__u64 retval;
|
||||
|
||||
if (cpu_has_llsc && R10000_LLSC_WAR) {
|
||||
__asm__ __volatile__(
|
||||
" .set push \n"
|
||||
" .set noat \n"
|
||||
" .set mips3 \n"
|
||||
"1: lld %0, %2 # __cmpxchg_u64 \n"
|
||||
" bne %0, %z3, 2f \n"
|
||||
" move $1, %z4 \n"
|
||||
" scd $1, %1 \n"
|
||||
" beqzl $1, 1b \n"
|
||||
"2: \n"
|
||||
" .set pop \n"
|
||||
: "=&r" (retval), "=R" (*m)
|
||||
: "R" (*m), "Jr" (old), "Jr" (new)
|
||||
: "memory");
|
||||
} else if (cpu_has_llsc) {
|
||||
__asm__ __volatile__(
|
||||
" .set push \n"
|
||||
" .set noat \n"
|
||||
" .set mips3 \n"
|
||||
"1: lld %0, %2 # __cmpxchg_u64 \n"
|
||||
" bne %0, %z3, 2f \n"
|
||||
" move $1, %z4 \n"
|
||||
" scd $1, %1 \n"
|
||||
" beqz $1, 1b \n"
|
||||
"2: \n"
|
||||
" .set pop \n"
|
||||
: "=&r" (retval), "=R" (*m)
|
||||
: "R" (*m), "Jr" (old), "Jr" (new)
|
||||
: "memory");
|
||||
} else {
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
retval = *m;
|
||||
if (retval == old)
|
||||
*m = new;
|
||||
local_irq_restore(flags); /* implies memory barrier */
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
#else
|
||||
extern unsigned long __cmpxchg_u64_unsupported_on_32bit_kernels(
|
||||
volatile int * m, unsigned long old, unsigned long new);
|
||||
#define __cmpxchg_u64 __cmpxchg_u64_unsupported_on_32bit_kernels
|
||||
extern unsigned long __cmpxchg_u64_local_unsupported_on_32bit_kernels(
|
||||
volatile int * m, unsigned long old, unsigned long new);
|
||||
#define __cmpxchg_u64_local __cmpxchg_u64_local_unsupported_on_32bit_kernels
|
||||
#endif
|
||||
|
||||
/* This function doesn't exist, so you'll get a linker error
|
||||
if something tries to do an invalid cmpxchg(). */
|
||||
extern void __cmpxchg_called_with_bad_pointer(void);
|
||||
|
||||
static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
|
||||
unsigned long new, int size)
|
||||
{
|
||||
switch (size) {
|
||||
case 4:
|
||||
return __cmpxchg_u32(ptr, old, new);
|
||||
case 8:
|
||||
return __cmpxchg_u64(ptr, old, new);
|
||||
}
|
||||
__cmpxchg_called_with_bad_pointer();
|
||||
return old;
|
||||
}
|
||||
|
||||
static inline unsigned long __cmpxchg_local(volatile void * ptr,
|
||||
unsigned long old, unsigned long new, int size)
|
||||
{
|
||||
switch (size) {
|
||||
case 4:
|
||||
return __cmpxchg_u32_local(ptr, old, new);
|
||||
case 8:
|
||||
return __cmpxchg_u64_local(ptr, old, new);
|
||||
}
|
||||
__cmpxchg_called_with_bad_pointer();
|
||||
return old;
|
||||
}
|
||||
|
||||
#define cmpxchg(ptr,old,new) \
|
||||
((__typeof__(*(ptr)))__cmpxchg((ptr), \
|
||||
(unsigned long)(old), (unsigned long)(new),sizeof(*(ptr))))
|
||||
|
||||
#define cmpxchg_local(ptr,old,new) \
|
||||
((__typeof__(*(ptr)))__cmpxchg_local((ptr), \
|
||||
(unsigned long)(old), (unsigned long)(new),sizeof(*(ptr))))
|
||||
|
||||
extern void set_handler (unsigned long offset, void *addr, unsigned long len);
|
||||
extern void set_uncached_handler (unsigned long offset, void *addr, unsigned long len);
|
||||
|
||||
|
|
|
|||
|
|
@ -164,6 +164,7 @@ struct ktermios {
|
|||
#define HUPCL 0002000 /* Hang up on last close. */
|
||||
#define CLOCAL 0004000 /* Ignore modem status lines. */
|
||||
#define CBAUDEX 0010000
|
||||
#define BOTHER 0010000
|
||||
#define B57600 0010001
|
||||
#define B115200 0010002
|
||||
#define B230400 0010003
|
||||
|
|
@ -179,9 +180,11 @@ struct ktermios {
|
|||
#define B3000000 0010015
|
||||
#define B3500000 0010016
|
||||
#define B4000000 0010017
|
||||
#define CIBAUD 002003600000 /* input baud rate (not used) */
|
||||
#define CIBAUD 002003600000 /* input baud rate */
|
||||
#define CMSPAR 010000000000 /* mark or space (stick) parity */
|
||||
#define CRTSCTS 020000000000 /* flow control */
|
||||
#define CRTSCTS 020000000000 /* flow control */
|
||||
|
||||
#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */
|
||||
|
||||
/* c_lflag bits */
|
||||
#define ISIG 0000001 /* Enable signals. */
|
||||
|
|
|
|||
|
|
@ -122,8 +122,10 @@ struct termio {
|
|||
copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
|
||||
})
|
||||
|
||||
#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
|
||||
#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
|
||||
#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios2))
|
||||
#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2))
|
||||
#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))
|
||||
#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios))
|
||||
|
||||
#endif /* defined(__KERNEL__) */
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
|
||||
|
||||
#define RBTX4927_RTL_8019_BASE (0x1c020280-TBTX4927_ISA_IO_OFFSET)
|
||||
#define RBTX4927_RTL_8019_IRQ (29)
|
||||
#define RBTX4927_RTL_8019_IRQ (TX4927_IRQ_PIC_BEG + 5)
|
||||
|
||||
int toshiba_rbtx4927_irq_nested(int sw_irq);
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#define __ASM_TX4927_TX4927_H
|
||||
|
||||
#include <asm/tx4927/tx4927_mips.h>
|
||||
#include <asm/txx9irq.h>
|
||||
|
||||
/*
|
||||
This register naming came from the integrated CPU/controller name TX4927
|
||||
|
|
@ -421,32 +422,6 @@
|
|||
#define TX4927_PIO_LIMIT 0xf50f
|
||||
|
||||
|
||||
/* TX4927 Interrupt Controller (32-bit registers) */
|
||||
#define TX4927_IRC_BASE 0xf510
|
||||
#define TX4927_IRC_IRFLAG0 0xf510
|
||||
#define TX4927_IRC_IRFLAG1 0xf514
|
||||
#define TX4927_IRC_IRPOL 0xf518
|
||||
#define TX4927_IRC_IRRCNT 0xf51c
|
||||
#define TX4927_IRC_IRMASKINT 0xf520
|
||||
#define TX4927_IRC_IRMASKEXT 0xf524
|
||||
#define TX4927_IRC_IRDEN 0xf600
|
||||
#define TX4927_IRC_IRDM0 0xf604
|
||||
#define TX4927_IRC_IRDM1 0xf608
|
||||
#define TX4927_IRC_IRLVL0 0xf610
|
||||
#define TX4927_IRC_IRLVL1 0xf614
|
||||
#define TX4927_IRC_IRLVL2 0xf618
|
||||
#define TX4927_IRC_IRLVL3 0xf61c
|
||||
#define TX4927_IRC_IRLVL4 0xf620
|
||||
#define TX4927_IRC_IRLVL5 0xf624
|
||||
#define TX4927_IRC_IRLVL6 0xf628
|
||||
#define TX4927_IRC_IRLVL7 0xf62c
|
||||
#define TX4927_IRC_IRMSK 0xf640
|
||||
#define TX4927_IRC_IREDC 0xf660
|
||||
#define TX4927_IRC_IRPND 0xf680
|
||||
#define TX4927_IRC_IRCS 0xf6a0
|
||||
#define TX4927_IRC_LIMIT 0xf6ff
|
||||
|
||||
|
||||
/* TX4927 AC-link controller (32-bit registers) */
|
||||
#define TX4927_ACLC_BASE 0xf700
|
||||
#define TX4927_ACLC_ACCTLEN 0xf700
|
||||
|
|
@ -493,25 +468,11 @@
|
|||
#define TX4927_WR( reg, val ) TX4927_WR32( reg, val )
|
||||
|
||||
|
||||
#define TX4927_IRQ_CP0_BEG MIPS_CPU_IRQ_BASE
|
||||
#define TX4927_IRQ_CP0_END (MIPS_CPU_IRQ_BASE + 8 - 1)
|
||||
|
||||
|
||||
|
||||
#define MI8259_IRQ_ISA_RAW_BEG 0 /* optional backplane i8259 */
|
||||
#define MI8259_IRQ_ISA_RAW_END 15
|
||||
#define TX4927_IRQ_CP0_RAW_BEG 0 /* tx4927 cpu built-in cp0 */
|
||||
#define TX4927_IRQ_CP0_RAW_END 7
|
||||
#define TX4927_IRQ_PIC_RAW_BEG 0 /* tx4927 cpu build-in pic */
|
||||
#define TX4927_IRQ_PIC_RAW_END 31
|
||||
|
||||
|
||||
#define MI8259_IRQ_ISA_BEG MI8259_IRQ_ISA_RAW_BEG /* 0 */
|
||||
#define MI8259_IRQ_ISA_END MI8259_IRQ_ISA_RAW_END /* 15 */
|
||||
|
||||
#define TX4927_IRQ_CP0_BEG ((MI8259_IRQ_ISA_END+1)+TX4927_IRQ_CP0_RAW_BEG) /* 16 */
|
||||
#define TX4927_IRQ_CP0_END ((MI8259_IRQ_ISA_END+1)+TX4927_IRQ_CP0_RAW_END) /* 23 */
|
||||
|
||||
#define TX4927_IRQ_PIC_BEG ((TX4927_IRQ_CP0_END+1)+TX4927_IRQ_PIC_RAW_BEG) /* 24 */
|
||||
#define TX4927_IRQ_PIC_END ((TX4927_IRQ_CP0_END+1)+TX4927_IRQ_PIC_RAW_END) /* 55 */
|
||||
#define TX4927_IRQ_PIC_BEG TXX9_IRQ_BASE
|
||||
#define TX4927_IRQ_PIC_END (TXX9_IRQ_BASE + TXx9_MAX_IR - 1)
|
||||
|
||||
|
||||
#define TX4927_IRQ_USER0 (TX4927_IRQ_CP0_BEG+0)
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
#define TX4927_PCI_CLK_ACK 0x04
|
||||
#define TX4927_PCI_CLK_ACE 0x02
|
||||
#define TX4927_PCI_CLK_ENDIAN 0x01
|
||||
#define TX4927_NR_IRQ_LOCAL (8+16)
|
||||
#define TX4927_NR_IRQ_LOCAL TX4927_IRQ_PIC_BEG
|
||||
#define TX4927_NR_IRQ_IRC 32 /* On-Chip IRC */
|
||||
|
||||
#define TX4927_IR_PCIC 16
|
||||
|
|
@ -99,21 +99,6 @@ struct tx4927_ccfg_reg {
|
|||
volatile unsigned long long ramp;
|
||||
};
|
||||
|
||||
struct tx4927_irc_reg {
|
||||
volatile unsigned long cer;
|
||||
volatile unsigned long cr[2];
|
||||
volatile unsigned long unused0;
|
||||
volatile unsigned long ilr[8];
|
||||
volatile unsigned long unused1[4];
|
||||
volatile unsigned long imr;
|
||||
volatile unsigned long unused2[7];
|
||||
volatile unsigned long scr;
|
||||
volatile unsigned long unused3[7];
|
||||
volatile unsigned long ssr;
|
||||
volatile unsigned long unused4[7];
|
||||
volatile unsigned long csr;
|
||||
};
|
||||
|
||||
struct tx4927_pcic_reg {
|
||||
volatile unsigned long pciid;
|
||||
volatile unsigned long pcistatus;
|
||||
|
|
@ -182,11 +167,6 @@ struct tx4927_pcic_reg {
|
|||
|
||||
#endif /* _LANGUAGE_ASSEMBLY */
|
||||
|
||||
/* IRCSR : Int. Current Status */
|
||||
#define TX4927_IRCSR_IF 0x00010000
|
||||
#define TX4927_IRCSR_ILV_MASK 0x00000700
|
||||
#define TX4927_IRCSR_IVL_MASK 0x0000001f
|
||||
|
||||
/*
|
||||
* PCIC
|
||||
*/
|
||||
|
|
@ -278,7 +258,6 @@ struct tx4927_pcic_reg {
|
|||
#define tx4927_pcicptr ((struct tx4927_pcic_reg *)TX4927_PCIC_REG)
|
||||
#define tx4927_ccfgptr ((struct tx4927_ccfg_reg *)TX4927_CCFG_REG)
|
||||
#define tx4927_ebuscptr ((struct tx4927_ebusc_reg *)TX4927_EBUSC_REG)
|
||||
#define tx4927_ircptr ((struct tx4927_irc_reg *)TX4927_IRC_REG)
|
||||
|
||||
#endif /* _LANGUAGE_ASSEMBLY */
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/tx4938/tx4938.h>
|
||||
#include <asm/txx9irq.h>
|
||||
|
||||
/* CS */
|
||||
#define RBTX4938_CE0 0x1c000000 /* 64M */
|
||||
|
|
@ -123,21 +124,11 @@
|
|||
#define RBTX4938_NR_IRQ_IRC 32 /* On-Chip IRC */
|
||||
#define RBTX4938_NR_IRQ_IOC 8
|
||||
|
||||
#define MI8259_IRQ_ISA_RAW_BEG 0 /* optional backplane i8259 */
|
||||
#define MI8259_IRQ_ISA_RAW_END 15
|
||||
#define TX4938_IRQ_CP0_RAW_BEG 0 /* tx4938 cpu built-in cp0 */
|
||||
#define TX4938_IRQ_CP0_RAW_END 7
|
||||
#define TX4938_IRQ_PIC_RAW_BEG 0 /* tx4938 cpu build-in pic */
|
||||
#define TX4938_IRQ_PIC_RAW_END 31
|
||||
#define TX4938_IRQ_CP0_BEG MIPS_CPU_IRQ_BASE
|
||||
#define TX4938_IRQ_CP0_END (MIPS_CPU_IRQ_BASE + 8 - 1)
|
||||
|
||||
#define MI8259_IRQ_ISA_BEG MI8259_IRQ_ISA_RAW_BEG /* 0 */
|
||||
#define MI8259_IRQ_ISA_END MI8259_IRQ_ISA_RAW_END /* 15 */
|
||||
|
||||
#define TX4938_IRQ_CP0_BEG ((MI8259_IRQ_ISA_END+1)+TX4938_IRQ_CP0_RAW_BEG) /* 16 */
|
||||
#define TX4938_IRQ_CP0_END ((MI8259_IRQ_ISA_END+1)+TX4938_IRQ_CP0_RAW_END) /* 23 */
|
||||
|
||||
#define TX4938_IRQ_PIC_BEG ((TX4938_IRQ_CP0_END+1)+TX4938_IRQ_PIC_RAW_BEG) /* 24 */
|
||||
#define TX4938_IRQ_PIC_END ((TX4938_IRQ_CP0_END+1)+TX4938_IRQ_PIC_RAW_END) /* 55 */
|
||||
#define TX4938_IRQ_PIC_BEG TXX9_IRQ_BASE
|
||||
#define TX4938_IRQ_PIC_END (TXX9_IRQ_BASE + TXx9_MAX_IR - 1)
|
||||
#define TX4938_IRQ_NEST_EXT_ON_PIC (TX4938_IRQ_PIC_BEG+2)
|
||||
#define TX4938_IRQ_NEST_PIC_ON_CP0 (TX4938_IRQ_CP0_BEG+2)
|
||||
#define TX4938_IRQ_USER0 (TX4938_IRQ_CP0_BEG+0)
|
||||
|
|
@ -192,10 +183,4 @@
|
|||
#define RBTX4938_RTL_8019_BASE (RBTX4938_ETHER_ADDR - mips_io_port_base)
|
||||
#define RBTX4938_RTL_8019_IRQ (RBTX4938_IRQ_ETHER)
|
||||
|
||||
/* IRCR : Int. Control */
|
||||
#define TX4938_IRCR_LOW 0x00000000
|
||||
#define TX4938_IRCR_HIGH 0x00000001
|
||||
#define TX4938_IRCR_DOWN 0x00000002
|
||||
#define TX4938_IRCR_UP 0x00000003
|
||||
|
||||
#endif /* __ASM_TX_BOARDS_RBTX4938_H */
|
||||
|
|
|
|||
|
|
@ -272,20 +272,6 @@ struct tx4938_pio_reg {
|
|||
volatile unsigned long maskcpu;
|
||||
volatile unsigned long maskext;
|
||||
};
|
||||
struct tx4938_irc_reg {
|
||||
volatile unsigned long cer;
|
||||
volatile unsigned long cr[2];
|
||||
volatile unsigned long unused0;
|
||||
volatile unsigned long ilr[8];
|
||||
volatile unsigned long unused1[4];
|
||||
volatile unsigned long imr;
|
||||
volatile unsigned long unused2[7];
|
||||
volatile unsigned long scr;
|
||||
volatile unsigned long unused3[7];
|
||||
volatile unsigned long ssr;
|
||||
volatile unsigned long unused4[7];
|
||||
volatile unsigned long csr;
|
||||
};
|
||||
|
||||
struct tx4938_ndfmc_reg {
|
||||
endian_def_l2(unused0, dtr);
|
||||
|
|
@ -646,39 +632,12 @@ struct tx4938_ccfg_reg {
|
|||
#define TX4938_DMA_CSR_DESERR 0x00000002
|
||||
#define TX4938_DMA_CSR_SORERR 0x00000001
|
||||
|
||||
/* TX4938 Interrupt Controller (32-bit registers) */
|
||||
#define TX4938_IRC_BASE 0xf510
|
||||
#define TX4938_IRC_IRFLAG0 0xf510
|
||||
#define TX4938_IRC_IRFLAG1 0xf514
|
||||
#define TX4938_IRC_IRPOL 0xf518
|
||||
#define TX4938_IRC_IRRCNT 0xf51c
|
||||
#define TX4938_IRC_IRMASKINT 0xf520
|
||||
#define TX4938_IRC_IRMASKEXT 0xf524
|
||||
#define TX4938_IRC_IRDEN 0xf600
|
||||
#define TX4938_IRC_IRDM0 0xf604
|
||||
#define TX4938_IRC_IRDM1 0xf608
|
||||
#define TX4938_IRC_IRLVL0 0xf610
|
||||
#define TX4938_IRC_IRLVL1 0xf614
|
||||
#define TX4938_IRC_IRLVL2 0xf618
|
||||
#define TX4938_IRC_IRLVL3 0xf61c
|
||||
#define TX4938_IRC_IRLVL4 0xf620
|
||||
#define TX4938_IRC_IRLVL5 0xf624
|
||||
#define TX4938_IRC_IRLVL6 0xf628
|
||||
#define TX4938_IRC_IRLVL7 0xf62c
|
||||
#define TX4938_IRC_IRMSK 0xf640
|
||||
#define TX4938_IRC_IREDC 0xf660
|
||||
#define TX4938_IRC_IRPND 0xf680
|
||||
#define TX4938_IRC_IRCS 0xf6a0
|
||||
#define TX4938_IRC_LIMIT 0xf6ff
|
||||
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#define tx4938_sdramcptr ((struct tx4938_sdramc_reg *)TX4938_SDRAMC_REG)
|
||||
#define tx4938_ebuscptr ((struct tx4938_ebusc_reg *)TX4938_EBUSC_REG)
|
||||
#define tx4938_dmaptr(ch) ((struct tx4938_dma_reg *)TX4938_DMA_REG(ch))
|
||||
#define tx4938_ndfmcptr ((struct tx4938_ndfmc_reg *)TX4938_NDFMC_REG)
|
||||
#define tx4938_ircptr ((struct tx4938_irc_reg *)TX4938_IRC_REG)
|
||||
#define tx4938_pcicptr ((struct tx4938_pcic_reg *)TX4938_PCIC_REG)
|
||||
#define tx4938_pcic1ptr ((struct tx4938_pcic_reg *)TX4938_PCIC1_REG)
|
||||
#define tx4938_ccfgptr ((struct tx4938_ccfg_reg *)TX4938_CCFG_REG)
|
||||
|
|
|
|||
30
include/asm-mips/txx9irq.h
Normal file
30
include/asm-mips/txx9irq.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* include/asm-mips/txx9irq.h
|
||||
* TX39/TX49 interrupt controller definitions.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
#ifndef __ASM_TXX9IRQ_H
|
||||
#define __ASM_TXX9IRQ_H
|
||||
|
||||
#include <irq.h>
|
||||
|
||||
#ifdef CONFIG_IRQ_CPU
|
||||
#define TXX9_IRQ_BASE (MIPS_CPU_IRQ_BASE + 8)
|
||||
#else
|
||||
#define TXX9_IRQ_BASE 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_TX39XX
|
||||
#define TXx9_MAX_IR 16
|
||||
#else
|
||||
#define TXx9_MAX_IR 32
|
||||
#endif
|
||||
|
||||
void txx9_irq_init(unsigned long baseaddr);
|
||||
int txx9_irq(void);
|
||||
int txx9_irq_set_pri(int irc_irq, int new_pri);
|
||||
|
||||
#endif /* __ASM_TXX9IRQ_H */
|
||||
|
|
@ -15,6 +15,16 @@ extern unsigned long parisc_vmerge_max_size;
|
|||
#define virt_to_bus virt_to_phys
|
||||
#define bus_to_virt phys_to_virt
|
||||
|
||||
static inline unsigned long isa_bus_to_virt(unsigned long addr) {
|
||||
BUG();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned long isa_virt_to_bus(void *addr) {
|
||||
BUG();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Memory mapped I/O
|
||||
*
|
||||
|
|
|
|||
6
include/asm-parisc/vga.h
Normal file
6
include/asm-parisc/vga.h
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef __ASM_PARISC_VGA_H__
|
||||
#define __ASM_PARISC_VGA_H__
|
||||
|
||||
/* nothing */
|
||||
|
||||
#endif __ASM_PARISC_VGA_H__
|
||||
|
|
@ -130,6 +130,7 @@ struct spu {
|
|||
u64 flags;
|
||||
u64 dar;
|
||||
u64 dsisr;
|
||||
u64 class_0_pending;
|
||||
size_t ls_size;
|
||||
unsigned int slb_replace;
|
||||
struct mm_struct *mm;
|
||||
|
|
@ -138,7 +139,6 @@ struct spu {
|
|||
unsigned long long timestamp;
|
||||
pid_t pid;
|
||||
pid_t tgid;
|
||||
int class_0_pending;
|
||||
spinlock_t register_lock;
|
||||
|
||||
void (* wbox_callback)(struct spu *spu);
|
||||
|
|
|
|||
|
|
@ -149,6 +149,11 @@ static inline u64 get_tb(void)
|
|||
}
|
||||
#endif /* !CONFIG_PPC64 */
|
||||
|
||||
static inline u64 get_tb_or_rtc(void)
|
||||
{
|
||||
return __USE_RTC() ? get_rtc() : get_tb();
|
||||
}
|
||||
|
||||
static inline void set_tb(unsigned int upper, unsigned int lower)
|
||||
{
|
||||
mtspr(SPRN_TBWL, 0);
|
||||
|
|
|
|||
|
|
@ -16,8 +16,9 @@
|
|||
#define flat_argvp_envp_on_stack() 0
|
||||
#define flat_old_ram_flag(flags) (flags)
|
||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||
#define flat_get_addr_from_rp(rp, relval, flags) get_unaligned(rp)
|
||||
#define flat_get_addr_from_rp(rp, relval, flags, p) get_unaligned(rp)
|
||||
#define flat_put_addr_at_rp(rp, val, relval) put_unaligned(val,rp)
|
||||
#define flat_get_relocate_addr(rel) (rel)
|
||||
#define flat_set_persistent(relval, p) 0
|
||||
|
||||
#endif /* __ASM_SH_FLAT_H */
|
||||
|
|
|
|||
|
|
@ -57,6 +57,10 @@ BTFIXUPDEF_CALL(void, flush_tlb_page, struct vm_area_struct *, unsigned long)
|
|||
/*
|
||||
* This is a kludge, until I know better. --zaitcev XXX
|
||||
*/
|
||||
#define flush_tlb_kernel_range(start, end) flush_tlb_all()
|
||||
static inline void flush_tlb_kernel_range(unsigned long start,
|
||||
unsigned long end)
|
||||
{
|
||||
flush_tlb_all();
|
||||
}
|
||||
|
||||
#endif /* _SPARC_TLBFLUSH_H */
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@ struct dev_archdata {
|
|||
|
||||
struct device_node *prom_node;
|
||||
struct of_device *op;
|
||||
|
||||
unsigned int msi_num;
|
||||
};
|
||||
|
||||
#endif /* _ASM_SPARC64_DEVICE_H */
|
||||
|
|
|
|||
|
|
@ -16,21 +16,21 @@
|
|||
#include <asm/ptrace.h>
|
||||
|
||||
/* IMAP/ICLR register defines */
|
||||
#define IMAP_VALID 0x80000000 /* IRQ Enabled */
|
||||
#define IMAP_TID_UPA 0x7c000000 /* UPA TargetID */
|
||||
#define IMAP_TID_JBUS 0x7c000000 /* JBUS TargetID */
|
||||
#define IMAP_VALID 0x80000000UL /* IRQ Enabled */
|
||||
#define IMAP_TID_UPA 0x7c000000UL /* UPA TargetID */
|
||||
#define IMAP_TID_JBUS 0x7c000000UL /* JBUS TargetID */
|
||||
#define IMAP_TID_SHIFT 26
|
||||
#define IMAP_AID_SAFARI 0x7c000000 /* Safari AgentID */
|
||||
#define IMAP_AID_SAFARI 0x7c000000UL /* Safari AgentID */
|
||||
#define IMAP_AID_SHIFT 26
|
||||
#define IMAP_NID_SAFARI 0x03e00000 /* Safari NodeID */
|
||||
#define IMAP_NID_SAFARI 0x03e00000UL /* Safari NodeID */
|
||||
#define IMAP_NID_SHIFT 21
|
||||
#define IMAP_IGN 0x000007c0 /* IRQ Group Number */
|
||||
#define IMAP_INO 0x0000003f /* IRQ Number */
|
||||
#define IMAP_INR 0x000007ff /* Full interrupt number*/
|
||||
#define IMAP_IGN 0x000007c0UL /* IRQ Group Number */
|
||||
#define IMAP_INO 0x0000003fUL /* IRQ Number */
|
||||
#define IMAP_INR 0x000007ffUL /* Full interrupt number*/
|
||||
|
||||
#define ICLR_IDLE 0x00000000 /* Idle state */
|
||||
#define ICLR_TRANSMIT 0x00000001 /* Transmit state */
|
||||
#define ICLR_PENDING 0x00000003 /* Pending state */
|
||||
#define ICLR_IDLE 0x00000000UL /* Idle state */
|
||||
#define ICLR_TRANSMIT 0x00000001UL /* Transmit state */
|
||||
#define ICLR_PENDING 0x00000003UL /* Pending state */
|
||||
|
||||
/* The largest number of unique interrupt sources we support.
|
||||
* If this needs to ever be larger than 255, you need to change
|
||||
|
|
@ -53,6 +53,9 @@ extern unsigned int sun4v_build_msi(u32 devhandle, unsigned int *virt_irq_p,
|
|||
extern void sun4v_destroy_msi(unsigned int virt_irq);
|
||||
extern unsigned int sbus_build_irq(void *sbus, unsigned int ino);
|
||||
|
||||
extern void sparc64_set_msi(unsigned int virt_irq, u32 msi);
|
||||
extern u32 sparc64_get_msi(unsigned int virt_irq);
|
||||
|
||||
extern void fixup_irqs(void);
|
||||
|
||||
static __inline__ void set_softint(unsigned long bits)
|
||||
|
|
|
|||
|
|
@ -297,11 +297,7 @@ extern void prom_sun4v_guest_soft_state(void);
|
|||
extern int prom_ihandle2path(int handle, char *buffer, int bufsize);
|
||||
|
||||
/* Client interface level routines. */
|
||||
extern void prom_set_trap_table(unsigned long tba);
|
||||
extern void prom_set_trap_table_sun4v(unsigned long tba, unsigned long mmfsa);
|
||||
|
||||
extern long p1275_cmd(const char *, long, ...);
|
||||
|
||||
|
||||
#if 0
|
||||
#define P1275_SIZE(x) ((((long)((x) / 32)) << 32) | (x))
|
||||
|
|
|
|||
|
|
@ -16,82 +16,112 @@
|
|||
|
||||
. = ALIGN(4096);
|
||||
.note : { *(.note.*) }
|
||||
__start___ex_table = .;
|
||||
__ex_table : { *(__ex_table) }
|
||||
__stop___ex_table = .;
|
||||
__ex_table : {
|
||||
__start___ex_table = .;
|
||||
*(__ex_table)
|
||||
__stop___ex_table = .;
|
||||
}
|
||||
|
||||
BUG_TABLE
|
||||
|
||||
__uml_setup_start = .;
|
||||
.uml.setup.init : { *(.uml.setup.init) }
|
||||
__uml_setup_end = .;
|
||||
.uml.setup.init : {
|
||||
__uml_setup_start = .;
|
||||
*(.uml.setup.init)
|
||||
__uml_setup_end = .;
|
||||
}
|
||||
|
||||
__uml_help_start = .;
|
||||
.uml.help.init : { *(.uml.help.init) }
|
||||
__uml_help_end = .;
|
||||
.uml.help.init : {
|
||||
__uml_help_start = .;
|
||||
*(.uml.help.init)
|
||||
__uml_help_end = .;
|
||||
}
|
||||
|
||||
__uml_postsetup_start = .;
|
||||
.uml.postsetup.init : { *(.uml.postsetup.init) }
|
||||
__uml_postsetup_end = .;
|
||||
.uml.postsetup.init : {
|
||||
__uml_postsetup_start = .;
|
||||
*(.uml.postsetup.init)
|
||||
__uml_postsetup_end = .;
|
||||
}
|
||||
|
||||
__setup_start = .;
|
||||
.init.setup : { *(.init.setup) }
|
||||
__setup_end = .;
|
||||
.init.setup : {
|
||||
__setup_start = .;
|
||||
*(.init.setup)
|
||||
__setup_end = .;
|
||||
}
|
||||
|
||||
. = ALIGN(32);
|
||||
__per_cpu_start = . ;
|
||||
.data.percpu : { *(.data.percpu) }
|
||||
__per_cpu_end = . ;
|
||||
|
||||
__initcall_start = .;
|
||||
.initcall.init : {
|
||||
INITCALLS
|
||||
.data.percpu : {
|
||||
__per_cpu_start = . ;
|
||||
*(.data.percpu)
|
||||
__per_cpu_end = . ;
|
||||
}
|
||||
|
||||
.initcall.init : {
|
||||
__initcall_start = .;
|
||||
INITCALLS
|
||||
__initcall_end = .;
|
||||
}
|
||||
__initcall_end = .;
|
||||
|
||||
__con_initcall_start = .;
|
||||
.con_initcall.init : { *(.con_initcall.init) }
|
||||
__con_initcall_end = .;
|
||||
.con_initcall.init : {
|
||||
__con_initcall_start = .;
|
||||
*(.con_initcall.init)
|
||||
__con_initcall_end = .;
|
||||
}
|
||||
|
||||
__uml_initcall_start = .;
|
||||
.uml.initcall.init : { *(.uml.initcall.init) }
|
||||
__uml_initcall_end = .;
|
||||
.uml.initcall.init : {
|
||||
__uml_initcall_start = .;
|
||||
*(.uml.initcall.init)
|
||||
__uml_initcall_end = .;
|
||||
}
|
||||
__init_end = .;
|
||||
|
||||
SECURITY_INIT
|
||||
|
||||
__exitcall_begin = .;
|
||||
.exitcall : { *(.exitcall.exit) }
|
||||
__exitcall_end = .;
|
||||
.exitcall : {
|
||||
__exitcall_begin = .;
|
||||
*(.exitcall.exit)
|
||||
__exitcall_end = .;
|
||||
}
|
||||
|
||||
__uml_exitcall_begin = .;
|
||||
.uml.exitcall : { *(.uml.exitcall.exit) }
|
||||
__uml_exitcall_end = .;
|
||||
.uml.exitcall : {
|
||||
__uml_exitcall_begin = .;
|
||||
*(.uml.exitcall.exit)
|
||||
__uml_exitcall_end = .;
|
||||
}
|
||||
|
||||
. = ALIGN(4);
|
||||
__alt_instructions = .;
|
||||
.altinstructions : { *(.altinstructions) }
|
||||
__alt_instructions_end = .;
|
||||
.altinstructions : {
|
||||
__alt_instructions = .;
|
||||
*(.altinstructions)
|
||||
__alt_instructions_end = .;
|
||||
}
|
||||
.altinstr_replacement : { *(.altinstr_replacement) }
|
||||
/* .exit.text is discard at runtime, not link time, to deal with references
|
||||
from .altinstructions and .eh_frame */
|
||||
.exit.text : { *(.exit.text) }
|
||||
.exit.data : { *(.exit.data) }
|
||||
|
||||
__preinit_array_start = .;
|
||||
.preinit_array : { *(.preinit_array) }
|
||||
__preinit_array_end = .;
|
||||
__init_array_start = .;
|
||||
.init_array : { *(.init_array) }
|
||||
__init_array_end = .;
|
||||
__fini_array_start = .;
|
||||
.fini_array : { *(.fini_array) }
|
||||
__fini_array_end = .;
|
||||
.preinit_array : {
|
||||
__preinit_array_start = .;
|
||||
*(.preinit_array)
|
||||
__preinit_array_end = .;
|
||||
}
|
||||
.init_array : {
|
||||
__init_array_start = .;
|
||||
*(.init_array)
|
||||
__init_array_end = .;
|
||||
}
|
||||
.fini_array : {
|
||||
__fini_array_start = .;
|
||||
*(.fini_array)
|
||||
__fini_array_end = .;
|
||||
}
|
||||
|
||||
. = ALIGN(4096);
|
||||
__initramfs_start = .;
|
||||
.init.ramfs : { *(.init.ramfs) }
|
||||
__initramfs_end = .;
|
||||
.init.ramfs : {
|
||||
__initramfs_start = .;
|
||||
*(.init.ramfs)
|
||||
__initramfs_end = .;
|
||||
}
|
||||
|
||||
/* Sections to be discarded */
|
||||
/DISCARD/ : {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,9 @@
|
|||
#ifndef __UM_ELF_X86_64_H
|
||||
#define __UM_ELF_X86_64_H
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <asm/user.h>
|
||||
#include "skas.h"
|
||||
|
||||
/* x86-64 relocation types, taken from asm-x86_64/elf.h */
|
||||
#define R_X86_64_NONE 0 /* No reloc */
|
||||
|
|
@ -64,6 +66,44 @@ typedef struct { } elf_fpregset_t;
|
|||
PT_REGS_R15(regs) = 0; \
|
||||
} while (0)
|
||||
|
||||
#define ELF_CORE_COPY_REGS(pr_reg, regs) \
|
||||
(pr_reg)[0] = (regs)->regs.skas.regs[0]; \
|
||||
(pr_reg)[1] = (regs)->regs.skas.regs[1]; \
|
||||
(pr_reg)[2] = (regs)->regs.skas.regs[2]; \
|
||||
(pr_reg)[3] = (regs)->regs.skas.regs[3]; \
|
||||
(pr_reg)[4] = (regs)->regs.skas.regs[4]; \
|
||||
(pr_reg)[5] = (regs)->regs.skas.regs[5]; \
|
||||
(pr_reg)[6] = (regs)->regs.skas.regs[6]; \
|
||||
(pr_reg)[7] = (regs)->regs.skas.regs[7]; \
|
||||
(pr_reg)[8] = (regs)->regs.skas.regs[8]; \
|
||||
(pr_reg)[9] = (regs)->regs.skas.regs[9]; \
|
||||
(pr_reg)[10] = (regs)->regs.skas.regs[10]; \
|
||||
(pr_reg)[11] = (regs)->regs.skas.regs[11]; \
|
||||
(pr_reg)[12] = (regs)->regs.skas.regs[12]; \
|
||||
(pr_reg)[13] = (regs)->regs.skas.regs[13]; \
|
||||
(pr_reg)[14] = (regs)->regs.skas.regs[14]; \
|
||||
(pr_reg)[15] = (regs)->regs.skas.regs[15]; \
|
||||
(pr_reg)[16] = (regs)->regs.skas.regs[16]; \
|
||||
(pr_reg)[17] = (regs)->regs.skas.regs[17]; \
|
||||
(pr_reg)[18] = (regs)->regs.skas.regs[18]; \
|
||||
(pr_reg)[19] = (regs)->regs.skas.regs[19]; \
|
||||
(pr_reg)[20] = (regs)->regs.skas.regs[20]; \
|
||||
(pr_reg)[21] = current->thread.arch.fs; \
|
||||
(pr_reg)[22] = 0; \
|
||||
(pr_reg)[23] = 0; \
|
||||
(pr_reg)[24] = 0; \
|
||||
(pr_reg)[25] = 0; \
|
||||
(pr_reg)[26] = 0;
|
||||
|
||||
static inline int elf_core_copy_fpregs(struct task_struct *t,
|
||||
elf_fpregset_t *fpu)
|
||||
{
|
||||
int cpu = current_thread->cpu;
|
||||
return save_fp_registers(userspace_pid[cpu], (unsigned long *) fpu);
|
||||
}
|
||||
|
||||
#define ELF_CORE_COPY_FPREGS(t, fpu) elf_core_copy_fpregs(t, fpu)
|
||||
|
||||
#ifdef TIF_IA32 /* XXX */
|
||||
#error XXX, indeed
|
||||
clear_thread_flag(TIF_IA32);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
#define flat_stack_align(sp) /* nothing needed */
|
||||
#define flat_argvp_envp_on_stack() 0
|
||||
#define flat_old_ram_flag(flags) (flags)
|
||||
#define flat_set_persistent(relval, p) 0
|
||||
|
||||
/* We store the type of relocation in the top 4 bits of the `relval.' */
|
||||
|
||||
|
|
@ -46,7 +47,8 @@ flat_get_relocate_addr (unsigned long relval)
|
|||
For the v850, RP should always be half-word aligned. */
|
||||
static inline unsigned long flat_get_addr_from_rp (unsigned long *rp,
|
||||
unsigned long relval,
|
||||
unsigned long flags)
|
||||
unsigned long flags,
|
||||
unsigned long *persistent)
|
||||
{
|
||||
short *srp = (short *)rp;
|
||||
|
||||
|
|
|
|||
|
|
@ -109,6 +109,12 @@ extern int mpc_default_type;
|
|||
/* 1 if "noapic" boot option passed */
|
||||
extern int skip_ioapic_setup;
|
||||
|
||||
static inline void disable_ioapic_setup(void)
|
||||
{
|
||||
skip_ioapic_setup = 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* If we use the IO-APIC for IRQ routing, disable automatic
|
||||
* assignment of PCI IRQ's.
|
||||
|
|
|
|||
|
|
@ -4,10 +4,6 @@
|
|||
#include <asm/pda.h>
|
||||
#include <linux/threads.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/quicklist.h>
|
||||
|
||||
#define QUICK_PGD 0 /* We preserve special mappings over free */
|
||||
#define QUICK_PT 1 /* Other page table pages that are zero on free */
|
||||
|
||||
#define pmd_populate_kernel(mm, pmd, pte) \
|
||||
set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)))
|
||||
|
|
@ -24,23 +20,23 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *p
|
|||
static inline void pmd_free(pmd_t *pmd)
|
||||
{
|
||||
BUG_ON((unsigned long)pmd & (PAGE_SIZE-1));
|
||||
quicklist_free(QUICK_PT, NULL, pmd);
|
||||
free_page((unsigned long)pmd);
|
||||
}
|
||||
|
||||
static inline pmd_t *pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
|
||||
{
|
||||
return (pmd_t *)quicklist_alloc(QUICK_PT, GFP_KERNEL|__GFP_REPEAT, NULL);
|
||||
return (pmd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
|
||||
}
|
||||
|
||||
static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
|
||||
{
|
||||
return (pud_t *)quicklist_alloc(QUICK_PT, GFP_KERNEL|__GFP_REPEAT, NULL);
|
||||
return (pud_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
|
||||
}
|
||||
|
||||
static inline void pud_free (pud_t *pud)
|
||||
{
|
||||
BUG_ON((unsigned long)pud & (PAGE_SIZE-1));
|
||||
quicklist_free(QUICK_PT, NULL, pud);
|
||||
free_page((unsigned long)pud);
|
||||
}
|
||||
|
||||
static inline void pgd_list_add(pgd_t *pgd)
|
||||
|
|
@ -61,57 +57,41 @@ static inline void pgd_list_del(pgd_t *pgd)
|
|||
spin_unlock(&pgd_lock);
|
||||
}
|
||||
|
||||
static inline void pgd_ctor(void *x)
|
||||
{
|
||||
unsigned boundary;
|
||||
pgd_t *pgd = x;
|
||||
struct page *page = virt_to_page(pgd);
|
||||
|
||||
/*
|
||||
* Copy kernel pointers in from init.
|
||||
*/
|
||||
boundary = pgd_index(__PAGE_OFFSET);
|
||||
memcpy(pgd + boundary,
|
||||
init_level4_pgt + boundary,
|
||||
(PTRS_PER_PGD - boundary) * sizeof(pgd_t));
|
||||
|
||||
spin_lock(&pgd_lock);
|
||||
list_add(&page->lru, &pgd_list);
|
||||
spin_unlock(&pgd_lock);
|
||||
}
|
||||
|
||||
static inline void pgd_dtor(void *x)
|
||||
{
|
||||
pgd_t *pgd = x;
|
||||
struct page *page = virt_to_page(pgd);
|
||||
|
||||
spin_lock(&pgd_lock);
|
||||
list_del(&page->lru);
|
||||
spin_unlock(&pgd_lock);
|
||||
}
|
||||
|
||||
static inline pgd_t *pgd_alloc(struct mm_struct *mm)
|
||||
{
|
||||
pgd_t *pgd = (pgd_t *)quicklist_alloc(QUICK_PGD,
|
||||
GFP_KERNEL|__GFP_REPEAT, pgd_ctor);
|
||||
unsigned boundary;
|
||||
pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
|
||||
if (!pgd)
|
||||
return NULL;
|
||||
pgd_list_add(pgd);
|
||||
/*
|
||||
* Copy kernel pointers in from init.
|
||||
* Could keep a freelist or slab cache of those because the kernel
|
||||
* part never changes.
|
||||
*/
|
||||
boundary = pgd_index(__PAGE_OFFSET);
|
||||
memset(pgd, 0, boundary * sizeof(pgd_t));
|
||||
memcpy(pgd + boundary,
|
||||
init_level4_pgt + boundary,
|
||||
(PTRS_PER_PGD - boundary) * sizeof(pgd_t));
|
||||
return pgd;
|
||||
}
|
||||
|
||||
static inline void pgd_free(pgd_t *pgd)
|
||||
{
|
||||
BUG_ON((unsigned long)pgd & (PAGE_SIZE-1));
|
||||
quicklist_free(QUICK_PGD, pgd_dtor, pgd);
|
||||
pgd_list_del(pgd);
|
||||
free_page((unsigned long)pgd);
|
||||
}
|
||||
|
||||
static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
|
||||
{
|
||||
return (pte_t *)quicklist_alloc(QUICK_PT, GFP_KERNEL|__GFP_REPEAT, NULL);
|
||||
return (pte_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
|
||||
}
|
||||
|
||||
static inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
|
||||
{
|
||||
void *p = (void *)quicklist_alloc(QUICK_PT, GFP_KERNEL|__GFP_REPEAT, NULL);
|
||||
|
||||
void *p = (void *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
|
||||
if (!p)
|
||||
return NULL;
|
||||
return virt_to_page(p);
|
||||
|
|
@ -123,22 +103,17 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long add
|
|||
static inline void pte_free_kernel(pte_t *pte)
|
||||
{
|
||||
BUG_ON((unsigned long)pte & (PAGE_SIZE-1));
|
||||
quicklist_free(QUICK_PT, NULL, pte);
|
||||
free_page((unsigned long)pte);
|
||||
}
|
||||
|
||||
static inline void pte_free(struct page *pte)
|
||||
{
|
||||
quicklist_free_page(QUICK_PT, NULL, pte);
|
||||
}
|
||||
__free_page(pte);
|
||||
}
|
||||
|
||||
#define __pte_free_tlb(tlb,pte) quicklist_free_page(QUICK_PT, NULL,(pte))
|
||||
#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
|
||||
|
||||
#define __pmd_free_tlb(tlb,x) quicklist_free(QUICK_PT, NULL, (x))
|
||||
#define __pud_free_tlb(tlb,x) quicklist_free(QUICK_PT, NULL, (x))
|
||||
#define __pmd_free_tlb(tlb,x) tlb_remove_page((tlb),virt_to_page(x))
|
||||
#define __pud_free_tlb(tlb,x) tlb_remove_page((tlb),virt_to_page(x))
|
||||
|
||||
static inline void check_pgt_cache(void)
|
||||
{
|
||||
quicklist_trim(QUICK_PGD, pgd_dtor, 25, 16);
|
||||
quicklist_trim(QUICK_PT, NULL, 25, 16);
|
||||
}
|
||||
#endif /* _X86_64_PGALLOC_H */
|
||||
|
|
|
|||
|
|
@ -411,6 +411,7 @@ pte_t *lookup_address(unsigned long addr);
|
|||
#define HAVE_ARCH_UNMAPPED_AREA
|
||||
|
||||
#define pgtable_cache_init() do { } while (0)
|
||||
#define check_pgt_cache() do { } while (0)
|
||||
|
||||
#define PAGE_AGP PAGE_KERNEL_NOCACHE
|
||||
#define HAVE_PAGE_AGP 1
|
||||
|
|
|
|||
|
|
@ -371,7 +371,7 @@ static inline void sync_core(void)
|
|||
#define ARCH_HAS_PREFETCH
|
||||
static inline void prefetch(void *x)
|
||||
{
|
||||
asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x));
|
||||
asm volatile("prefetcht0 (%0)" :: "r" (x));
|
||||
}
|
||||
|
||||
#define ARCH_HAS_PREFETCHW 1
|
||||
|
|
|
|||
|
|
@ -13,10 +13,6 @@
|
|||
#ifndef _XTENSA_BUGS_H
|
||||
#define _XTENSA_BUGS_H
|
||||
|
||||
#include <asm/processor.h>
|
||||
|
||||
static void __init check_bugs(void)
|
||||
{
|
||||
}
|
||||
static void check_bugs(void) { }
|
||||
|
||||
#endif /* _XTENSA_BUGS_H */
|
||||
|
|
|
|||
|
|
@ -19,6 +19,15 @@
|
|||
|
||||
#define DCACHE_WAY_SIZE (XCHAL_DCACHE_SIZE/XCHAL_DCACHE_WAYS)
|
||||
#define ICACHE_WAY_SIZE (XCHAL_ICACHE_SIZE/XCHAL_ICACHE_WAYS)
|
||||
#define DCACHE_WAY_SHIFT (XCHAL_DCACHE_SETWIDTH + XCHAL_DCACHE_LINEWIDTH)
|
||||
#define ICACHE_WAY_SHIFT (XCHAL_ICACHE_SETWIDTH + XCHAL_ICACHE_LINEWIDTH)
|
||||
|
||||
/* Maximum cache size per way. */
|
||||
#if DCACHE_WAY_SIZE >= ICACHE_WAY_SIZE
|
||||
# define CACHE_WAY_SIZE DCACHE_WAY_SIZE
|
||||
#else
|
||||
# define CACHE_WAY_SIZE ICACHE_WAY_SIZE
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _XTENSA_CACHE_H */
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* (C) 2001 - 2006 Tensilica Inc.
|
||||
* (C) 2001 - 2007 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_CACHEFLUSH_H
|
||||
|
|
@ -18,10 +18,7 @@
|
|||
#include <asm/page.h>
|
||||
|
||||
/*
|
||||
* flush and invalidate data cache, invalidate instruction cache:
|
||||
*
|
||||
* __flush_invalidate_cache_all()
|
||||
* __flush_invalidate_cache_range(from,sze)
|
||||
* Lo-level routines for cache flushing.
|
||||
*
|
||||
* invalidate data or instruction cache:
|
||||
*
|
||||
|
|
@ -40,26 +37,39 @@
|
|||
* __flush_invalidate_dcache_all()
|
||||
* __flush_invalidate_dcache_page(adr)
|
||||
* __flush_invalidate_dcache_range(from,size)
|
||||
*
|
||||
* specials for cache aliasing:
|
||||
*
|
||||
* __flush_invalidate_dcache_page_alias(vaddr,paddr)
|
||||
* __invalidate_icache_page_alias(vaddr,paddr)
|
||||
*/
|
||||
|
||||
extern void __flush_invalidate_cache_all(void);
|
||||
extern void __flush_invalidate_cache_range(unsigned long, unsigned long);
|
||||
extern void __flush_invalidate_dcache_all(void);
|
||||
extern void __invalidate_dcache_all(void);
|
||||
extern void __invalidate_icache_all(void);
|
||||
|
||||
extern void __invalidate_dcache_page(unsigned long);
|
||||
extern void __invalidate_icache_page(unsigned long);
|
||||
extern void __invalidate_icache_range(unsigned long, unsigned long);
|
||||
extern void __invalidate_dcache_range(unsigned long, unsigned long);
|
||||
|
||||
|
||||
#if XCHAL_DCACHE_IS_WRITEBACK
|
||||
extern void __flush_invalidate_dcache_all(void);
|
||||
extern void __flush_dcache_page(unsigned long);
|
||||
extern void __flush_dcache_range(unsigned long, unsigned long);
|
||||
extern void __flush_invalidate_dcache_page(unsigned long);
|
||||
extern void __flush_invalidate_dcache_range(unsigned long, unsigned long);
|
||||
#else
|
||||
# define __flush_dcache_page(p) do { } while(0)
|
||||
# define __flush_invalidate_dcache_page(p) do { } while(0)
|
||||
# define __flush_invalidate_dcache_range(p,s) do { } while(0)
|
||||
# define __flush_dcache_range(p,s) do { } while(0)
|
||||
# define __flush_dcache_page(p) do { } while(0)
|
||||
# define __flush_invalidate_dcache_page(p) __invalidate_dcache_page(p)
|
||||
# define __flush_invalidate_dcache_range(p,s) __invalidate_dcache_range(p,s)
|
||||
#endif
|
||||
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
extern void __flush_invalidate_dcache_page_alias(unsigned long, unsigned long);
|
||||
#endif
|
||||
#if (ICACHE_WAY_SIZE > PAGE_SIZE)
|
||||
extern void __invalidate_icache_page_alias(unsigned long, unsigned long);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
@ -71,17 +81,21 @@ extern void __flush_invalidate_dcache_range(unsigned long, unsigned long);
|
|||
* (see also Documentation/cachetlb.txt)
|
||||
*/
|
||||
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE) && XCHAL_DCACHE_IS_WRITEBACK
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
|
||||
#define flush_cache_all() __flush_invalidate_cache_all();
|
||||
#define flush_cache_mm(mm) __flush_invalidate_cache_all();
|
||||
#define flush_cache_dup_mm(mm) __flush_invalidate_cache_all();
|
||||
#define flush_cache_all() \
|
||||
do { \
|
||||
__flush_invalidate_dcache_all(); \
|
||||
__invalidate_icache_all(); \
|
||||
} while (0)
|
||||
|
||||
#define flush_cache_vmap(start,end) __flush_invalidate_cache_all();
|
||||
#define flush_cache_vunmap(start,end) __flush_invalidate_cache_all();
|
||||
#define flush_cache_mm(mm) flush_cache_all()
|
||||
#define flush_cache_dup_mm(mm) flush_cache_mm(mm)
|
||||
|
||||
#define flush_cache_vmap(start,end) flush_cache_all()
|
||||
#define flush_cache_vunmap(start,end) flush_cache_all()
|
||||
|
||||
extern void flush_dcache_page(struct page*);
|
||||
|
||||
extern void flush_cache_range(struct vm_area_struct*, ulong, ulong);
|
||||
extern void flush_cache_page(struct vm_area_struct*, unsigned long, unsigned long);
|
||||
|
||||
|
|
@ -101,24 +115,39 @@ extern void flush_cache_page(struct vm_area_struct*, unsigned long, unsigned lon
|
|||
|
||||
#endif
|
||||
|
||||
/* Ensure consistency between data and instruction cache. */
|
||||
#define flush_icache_range(start,end) \
|
||||
__invalidate_icache_range(start,(end)-(start))
|
||||
do { \
|
||||
__flush_dcache_range(start, (end) - (start)); \
|
||||
__invalidate_icache_range(start,(end) - (start)); \
|
||||
} while (0)
|
||||
|
||||
/* This is not required, see Documentation/cachetlb.txt */
|
||||
|
||||
#define flush_icache_page(vma,page) do { } while(0)
|
||||
#define flush_icache_page(vma,page) do { } while (0)
|
||||
|
||||
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
||||
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
||||
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
|
||||
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
|
||||
memcpy(dst, src, len)
|
||||
extern void copy_to_user_page(struct vm_area_struct*, struct page*,
|
||||
unsigned long, void*, const void*, unsigned long);
|
||||
extern void copy_from_user_page(struct vm_area_struct*, struct page*,
|
||||
unsigned long, void*, const void*, unsigned long);
|
||||
|
||||
#else
|
||||
|
||||
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
|
||||
do { \
|
||||
memcpy(dst, src, len); \
|
||||
__flush_dcache_range((unsigned long) dst, len); \
|
||||
__invalidate_icache_range((unsigned long) dst, len); \
|
||||
} while (0)
|
||||
|
||||
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
|
||||
memcpy(dst, src, len)
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _XTENSA_CACHEFLUSH_H */
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,56 @@
|
|||
#define EM_XTENSA 94
|
||||
#define EM_XTENSA_OLD 0xABC7
|
||||
|
||||
/* Xtensa relocations defined by the ABIs */
|
||||
|
||||
#define R_XTENSA_NONE 0
|
||||
#define R_XTENSA_32 1
|
||||
#define R_XTENSA_RTLD 2
|
||||
#define R_XTENSA_GLOB_DAT 3
|
||||
#define R_XTENSA_JMP_SLOT 4
|
||||
#define R_XTENSA_RELATIVE 5
|
||||
#define R_XTENSA_PLT 6
|
||||
#define R_XTENSA_OP0 8
|
||||
#define R_XTENSA_OP1 9
|
||||
#define R_XTENSA_OP2 10
|
||||
#define R_XTENSA_ASM_EXPAND 11
|
||||
#define R_XTENSA_ASM_SIMPLIFY 12
|
||||
#define R_XTENSA_GNU_VTINHERIT 15
|
||||
#define R_XTENSA_GNU_VTENTRY 16
|
||||
#define R_XTENSA_DIFF8 17
|
||||
#define R_XTENSA_DIFF16 18
|
||||
#define R_XTENSA_DIFF32 19
|
||||
#define R_XTENSA_SLOT0_OP 20
|
||||
#define R_XTENSA_SLOT1_OP 21
|
||||
#define R_XTENSA_SLOT2_OP 22
|
||||
#define R_XTENSA_SLOT3_OP 23
|
||||
#define R_XTENSA_SLOT4_OP 24
|
||||
#define R_XTENSA_SLOT5_OP 25
|
||||
#define R_XTENSA_SLOT6_OP 26
|
||||
#define R_XTENSA_SLOT7_OP 27
|
||||
#define R_XTENSA_SLOT8_OP 28
|
||||
#define R_XTENSA_SLOT9_OP 29
|
||||
#define R_XTENSA_SLOT10_OP 30
|
||||
#define R_XTENSA_SLOT11_OP 31
|
||||
#define R_XTENSA_SLOT12_OP 32
|
||||
#define R_XTENSA_SLOT13_OP 33
|
||||
#define R_XTENSA_SLOT14_OP 34
|
||||
#define R_XTENSA_SLOT0_ALT 35
|
||||
#define R_XTENSA_SLOT1_ALT 36
|
||||
#define R_XTENSA_SLOT2_ALT 37
|
||||
#define R_XTENSA_SLOT3_ALT 38
|
||||
#define R_XTENSA_SLOT4_ALT 39
|
||||
#define R_XTENSA_SLOT5_ALT 40
|
||||
#define R_XTENSA_SLOT6_ALT 41
|
||||
#define R_XTENSA_SLOT7_ALT 42
|
||||
#define R_XTENSA_SLOT8_ALT 43
|
||||
#define R_XTENSA_SLOT9_ALT 44
|
||||
#define R_XTENSA_SLOT10_ALT 45
|
||||
#define R_XTENSA_SLOT11_ALT 46
|
||||
#define R_XTENSA_SLOT12_ALT 47
|
||||
#define R_XTENSA_SLOT13_ALT 48
|
||||
#define R_XTENSA_SLOT14_ALT 49
|
||||
|
||||
/* ELF register definitions. This is needed for core dump support. */
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
#ifdef __KERNEL__
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/page.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -91,6 +91,10 @@
|
|||
#define TIOCSBRK _IO('T', 39) /* BSD compatibility */
|
||||
#define TIOCCBRK _IO('T', 40) /* BSD compatibility */
|
||||
#define TIOCGSID _IOR('T', 41, pid_t) /* Return the session ID of FD*/
|
||||
#define TCGETS2 _IOR('T', 42, struct termios2)
|
||||
#define TCSETS2 _IOW('T', 43, struct termios2)
|
||||
#define TCSETSW2 _IOW('T', 44, struct termios2)
|
||||
#define TCSETSF2 _IOW('T', 45, struct termios2)
|
||||
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
|
||||
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* linux/include/asm-xtensa/page.h
|
||||
* include/asm-xtensa/page.h
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
* Copyright (C) 2001 - 2007 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_PAGE_H
|
||||
|
|
@ -14,6 +14,12 @@
|
|||
#ifdef __KERNEL__
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/cache.h>
|
||||
|
||||
/*
|
||||
* Fixed TLB translations in the processor.
|
||||
*/
|
||||
|
||||
#define XCHAL_KSEG_CACHED_VADDR 0xd0000000
|
||||
#define XCHAL_KSEG_BYPASS_VADDR 0xd8000000
|
||||
|
|
@ -26,13 +32,60 @@
|
|||
*/
|
||||
|
||||
#define PAGE_SHIFT 12
|
||||
#define PAGE_SIZE (1 << PAGE_SHIFT)
|
||||
#define PAGE_SIZE (__XTENSA_UL_CONST(1) << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE - 1) & PAGE_MASK)
|
||||
|
||||
#define PAGE_OFFSET XCHAL_KSEG_CACHED_VADDR
|
||||
#define MAX_MEM_PFN XCHAL_KSEG_SIZE
|
||||
#define PGTABLE_START 0x80000000
|
||||
#define MAX_MEM_PFN XCHAL_KSEG_SIZE
|
||||
#define PGTABLE_START 0x80000000
|
||||
|
||||
/*
|
||||
* Cache aliasing:
|
||||
*
|
||||
* If the cache size for one way is greater than the page size, we have to
|
||||
* deal with cache aliasing. The cache index is wider than the page size:
|
||||
*
|
||||
* | |cache| cache index
|
||||
* | pfn |off| virtual address
|
||||
* |xxxx:X|zzz|
|
||||
* | : | |
|
||||
* | \ / | |
|
||||
* |trans.| |
|
||||
* | / \ | |
|
||||
* |yyyy:Y|zzz| physical address
|
||||
*
|
||||
* When the page number is translated to the physical page address, the lowest
|
||||
* bit(s) (X) that are part of the cache index are also translated (Y).
|
||||
* If this translation changes bit(s) (X), the cache index is also afected,
|
||||
* thus resulting in a different cache line than before.
|
||||
* The kernel does not provide a mechanism to ensure that the page color
|
||||
* (represented by this bit) remains the same when allocated or when pages
|
||||
* are remapped. When user pages are mapped into kernel space, the color of
|
||||
* the page might also change.
|
||||
*
|
||||
* We use the address space VMALLOC_END ... VMALLOC_END + DCACHE_WAY_SIZE * 2
|
||||
* to temporarily map a patch so we can match the color.
|
||||
*/
|
||||
|
||||
#if DCACHE_WAY_SIZE > PAGE_SIZE
|
||||
# define DCACHE_ALIAS_ORDER (DCACHE_WAY_SHIFT - PAGE_SHIFT)
|
||||
# define DCACHE_ALIAS_MASK (PAGE_MASK & (DCACHE_WAY_SIZE - 1))
|
||||
# define DCACHE_ALIAS(a) (((a) & DCACHE_ALIAS_MASK) >> PAGE_SHIFT)
|
||||
# define DCACHE_ALIAS_EQ(a,b) ((((a) ^ (b)) & DCACHE_ALIAS_MASK) == 0)
|
||||
#else
|
||||
# define DCACHE_ALIAS_ORDER 0
|
||||
#endif
|
||||
|
||||
#if ICACHE_WAY_SIZE > PAGE_SIZE
|
||||
# define ICACHE_ALIAS_ORDER (ICACHE_WAY_SHIFT - PAGE_SHIFT)
|
||||
# define ICACHE_ALIAS_MASK (PAGE_MASK & (ICACHE_WAY_SIZE - 1))
|
||||
# define ICACHE_ALIAS(a) (((a) & ICACHE_ALIAS_MASK) >> PAGE_SHIFT)
|
||||
# define ICACHE_ALIAS_EQ(a,b) ((((a) ^ (b)) & ICACHE_ALIAS_MASK) == 0)
|
||||
#else
|
||||
# define ICACHE_ALIAS_ORDER 0
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
|
||||
|
|
@ -58,34 +111,23 @@ typedef struct { unsigned long pgprot; } pgprot_t;
|
|||
|
||||
/*
|
||||
* Pure 2^n version of get_order
|
||||
* Use 'nsau' instructions if supported by the processor or the generic version.
|
||||
*/
|
||||
|
||||
static inline int get_order(unsigned long size)
|
||||
#if XCHAL_HAVE_NSA
|
||||
|
||||
static inline __attribute_const__ int get_order(unsigned long size)
|
||||
{
|
||||
int order;
|
||||
#ifndef XCHAL_HAVE_NSU
|
||||
unsigned long x1, x2, x4, x8, x16;
|
||||
|
||||
size = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||
x1 = size & 0xAAAAAAAA;
|
||||
x2 = size & 0xCCCCCCCC;
|
||||
x4 = size & 0xF0F0F0F0;
|
||||
x8 = size & 0xFF00FF00;
|
||||
x16 = size & 0xFFFF0000;
|
||||
order = x2 ? 2 : 0;
|
||||
order += (x16 != 0) * 16;
|
||||
order += (x8 != 0) * 8;
|
||||
order += (x4 != 0) * 4;
|
||||
order += (x1 != 0);
|
||||
|
||||
return order;
|
||||
#else
|
||||
size = (size - 1) >> PAGE_SHIFT;
|
||||
asm ("nsau %0, %1" : "=r" (order) : "r" (size));
|
||||
return 32 - order;
|
||||
#endif
|
||||
int lz;
|
||||
asm ("nsau %0, %1" : "=r" (lz) : "r" ((size - 1) >> PAGE_SHIFT));
|
||||
return 32 - lz;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
# include <asm-generic/page.h>
|
||||
|
||||
#endif
|
||||
|
||||
struct page;
|
||||
extern void clear_page(void *page);
|
||||
|
|
@ -96,11 +138,11 @@ extern void copy_page(void *to, void *from);
|
|||
* some extra work
|
||||
*/
|
||||
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
void clear_user_page(void *addr, unsigned long vaddr, struct page* page);
|
||||
void copy_user_page(void *to,void* from,unsigned long vaddr,struct page* page);
|
||||
#if DCACHE_WAY_SIZE > PAGE_SIZE
|
||||
extern void clear_user_page(void*, unsigned long, struct page*);
|
||||
extern void copy_user_page(void*, void*, unsigned long, struct page*);
|
||||
#else
|
||||
# define clear_user_page(page,vaddr,pg) clear_page(page)
|
||||
# define clear_user_page(page, vaddr, pg) clear_page(page)
|
||||
# define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* linux/include/asm-xtensa/pgalloc.h
|
||||
* include/asm-xtensa/pgalloc.h
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Copyright (C) 2001-2005 Tensilica Inc.
|
||||
* Copyright (C) 2001-2007 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_PGALLOC_H
|
||||
|
|
@ -13,103 +13,54 @@
|
|||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/threads.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
|
||||
/* Cache aliasing:
|
||||
*
|
||||
* If the cache size for one way is greater than the page size, we have to
|
||||
* deal with cache aliasing. The cache index is wider than the page size:
|
||||
*
|
||||
* |cache |
|
||||
* |pgnum |page| virtual address
|
||||
* |xxxxxX|zzzz|
|
||||
* | | |
|
||||
* \ / | |
|
||||
* trans.| |
|
||||
* / \ | |
|
||||
* |yyyyyY|zzzz| physical address
|
||||
*
|
||||
* When the page number is translated to the physical page address, the lowest
|
||||
* bit(s) (X) that are also part of the cache index are also translated (Y).
|
||||
* If this translation changes this bit (X), the cache index is also afected,
|
||||
* thus resulting in a different cache line than before.
|
||||
* The kernel does not provide a mechanism to ensure that the page color
|
||||
* (represented by this bit) remains the same when allocated or when pages
|
||||
* are remapped. When user pages are mapped into kernel space, the color of
|
||||
* the page might also change.
|
||||
*
|
||||
* We use the address space VMALLOC_END ... VMALLOC_END + DCACHE_WAY_SIZE * 2
|
||||
* to temporarily map a patch so we can match the color.
|
||||
*/
|
||||
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
# define PAGE_COLOR_MASK (PAGE_MASK & (DCACHE_WAY_SIZE-1))
|
||||
# define PAGE_COLOR(a) \
|
||||
(((unsigned long)(a)&PAGE_COLOR_MASK) >> PAGE_SHIFT)
|
||||
# define PAGE_COLOR_EQ(a,b) \
|
||||
((((unsigned long)(a) ^ (unsigned long)(b)) & PAGE_COLOR_MASK) == 0)
|
||||
# define PAGE_COLOR_MAP0(v) \
|
||||
(VMALLOC_END + ((unsigned long)(v) & PAGE_COLOR_MASK))
|
||||
# define PAGE_COLOR_MAP1(v) \
|
||||
(VMALLOC_END + ((unsigned long)(v) & PAGE_COLOR_MASK) + DCACHE_WAY_SIZE)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Allocating and freeing a pmd is trivial: the 1-entry pmd is
|
||||
* inside the pgd, so has no extra memory associated with it.
|
||||
*/
|
||||
|
||||
#define pgd_free(pgd) free_page((unsigned long)(pgd))
|
||||
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE) && XCHAL_DCACHE_IS_WRITEBACK
|
||||
|
||||
static inline void
|
||||
pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *pte)
|
||||
{
|
||||
pmd_val(*(pmdp)) = (unsigned long)(pte);
|
||||
__asm__ __volatile__ ("memw; dhwb %0, 0; dsync" :: "a" (pmdp));
|
||||
}
|
||||
|
||||
static inline void
|
||||
pmd_populate(struct mm_struct *mm, pmd_t *pmdp, struct page *page)
|
||||
{
|
||||
pmd_val(*(pmdp)) = (unsigned long)page_to_virt(page);
|
||||
__asm__ __volatile__ ("memw; dhwb %0, 0; dsync" :: "a" (pmdp));
|
||||
}
|
||||
|
||||
|
||||
|
||||
#else
|
||||
|
||||
# define pmd_populate_kernel(mm, pmdp, pte) \
|
||||
(pmd_val(*(pmdp)) = (unsigned long)(pte))
|
||||
# define pmd_populate(mm, pmdp, page) \
|
||||
(pmd_val(*(pmdp)) = (unsigned long)page_to_virt(page))
|
||||
|
||||
#endif
|
||||
#define pmd_populate_kernel(mm, pmdp, ptep) \
|
||||
(pmd_val(*(pmdp)) = ((unsigned long)ptep))
|
||||
#define pmd_populate(mm, pmdp, page) \
|
||||
(pmd_val(*(pmdp)) = ((unsigned long)page_to_virt(page)))
|
||||
|
||||
static inline pgd_t*
|
||||
pgd_alloc(struct mm_struct *mm)
|
||||
{
|
||||
pgd_t *pgd;
|
||||
|
||||
pgd = (pgd_t *)__get_free_pages(GFP_KERNEL|__GFP_ZERO, PGD_ORDER);
|
||||
|
||||
if (likely(pgd != NULL))
|
||||
__flush_dcache_page((unsigned long)pgd);
|
||||
|
||||
return pgd;
|
||||
return (pgd_t*) __get_free_pages(GFP_KERNEL | __GFP_ZERO, PGD_ORDER);
|
||||
}
|
||||
|
||||
extern pte_t* pte_alloc_one_kernel(struct mm_struct* mm, unsigned long addr);
|
||||
extern struct page* pte_alloc_one(struct mm_struct* mm, unsigned long addr);
|
||||
static inline void pgd_free(pgd_t *pgd)
|
||||
{
|
||||
free_page((unsigned long)pgd);
|
||||
}
|
||||
|
||||
#define pte_free_kernel(pte) free_page((unsigned long)pte)
|
||||
#define pte_free(pte) __free_page(pte)
|
||||
/* Use a slab cache for the pte pages (see also sparc64 implementation) */
|
||||
|
||||
extern struct kmem_cache *pgtable_cache;
|
||||
|
||||
static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
|
||||
unsigned long address)
|
||||
{
|
||||
return kmem_cache_alloc(pgtable_cache, GFP_KERNEL|__GFP_REPEAT);
|
||||
}
|
||||
|
||||
static inline struct page *pte_alloc_one(struct mm_struct *mm,
|
||||
unsigned long addr)
|
||||
{
|
||||
return virt_to_page(pte_alloc_one_kernel(mm, addr));
|
||||
}
|
||||
|
||||
static inline void pte_free_kernel(pte_t *pte)
|
||||
{
|
||||
kmem_cache_free(pgtable_cache, pte);
|
||||
}
|
||||
|
||||
static inline void pte_free(struct page *page)
|
||||
{
|
||||
kmem_cache_free(pgtable_cache, page_address(page));
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _XTENSA_PGALLOC_H */
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* linux/include/asm-xtensa/pgtable.h
|
||||
* include/asm-xtensa/pgtable.h
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version2 as
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Copyright (C) 2001 - 2005 Tensilica Inc.
|
||||
* Copyright (C) 2001 - 2007 Tensilica Inc.
|
||||
*/
|
||||
|
||||
#ifndef _XTENSA_PGTABLE_H
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
/*
|
||||
* The Xtensa architecture port of Linux has a two-level page table system,
|
||||
* i.e. the logical three-level Linux page table layout are folded.
|
||||
* i.e. the logical three-level Linux page table layout is folded.
|
||||
* Each task has the following memory page tables:
|
||||
*
|
||||
* PGD table (page directory), ie. 3rd-level page table:
|
||||
|
|
@ -43,6 +43,7 @@
|
|||
*
|
||||
* The individual pages are 4 kB big with special pages for the empty_zero_page.
|
||||
*/
|
||||
|
||||
#define PGDIR_SHIFT 22
|
||||
#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
|
||||
#define PGDIR_MASK (~(PGDIR_SIZE-1))
|
||||
|
|
@ -53,24 +54,26 @@
|
|||
*/
|
||||
#define PTRS_PER_PTE 1024
|
||||
#define PTRS_PER_PTE_SHIFT 10
|
||||
#define PTRS_PER_PMD 1
|
||||
#define PTRS_PER_PGD 1024
|
||||
#define PGD_ORDER 0
|
||||
#define PMD_ORDER 0
|
||||
#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE)
|
||||
#define FIRST_USER_ADDRESS 0
|
||||
#define FIRST_USER_ADDRESS 0
|
||||
#define FIRST_USER_PGD_NR (FIRST_USER_ADDRESS >> PGDIR_SHIFT)
|
||||
|
||||
/* virtual memory area. We keep a distance to other memory regions to be
|
||||
/*
|
||||
* Virtual memory area. We keep a distance to other memory regions to be
|
||||
* on the safe side. We also use this area for cache aliasing.
|
||||
*/
|
||||
|
||||
// FIXME: virtual memory area must be configuration-dependent
|
||||
|
||||
#define VMALLOC_START 0xC0000000
|
||||
#define VMALLOC_END 0xC7FF0000
|
||||
#define VMALLOC_END 0xC6FEFFFF
|
||||
#define TLBTEMP_BASE_1 0xC6FF0000
|
||||
#define TLBTEMP_BASE_2 0xC6FF8000
|
||||
#define MODULE_START 0xC7000000
|
||||
#define MODULE_END 0xC7FFFFFF
|
||||
|
||||
/* Xtensa Linux config PTE layout (when present):
|
||||
/*
|
||||
* Xtensa Linux config PTE layout (when present):
|
||||
* 31-12: PPN
|
||||
* 11-6: Software
|
||||
* 5-4: RING
|
||||
|
|
@ -86,47 +89,55 @@
|
|||
* See further below for PTE layout for swapped-out pages.
|
||||
*/
|
||||
|
||||
#define _PAGE_VALID (1<<0) /* hardware: page is accessible */
|
||||
#define _PAGE_WRENABLE (1<<1) /* hardware: page is writable */
|
||||
#define _PAGE_HW_EXEC (1<<0) /* hardware: page is executable */
|
||||
#define _PAGE_HW_WRITE (1<<1) /* hardware: page is writable */
|
||||
|
||||
#define _PAGE_FILE (1<<1) /* non-linear mapping, if !present */
|
||||
#define _PAGE_PROTNONE (3<<0) /* special case for VM_PROT_NONE */
|
||||
|
||||
/* None of these cache modes include MP coherency: */
|
||||
#define _PAGE_NO_CACHE (0<<2) /* bypass, non-speculative */
|
||||
#if XCHAL_DCACHE_IS_WRITEBACK
|
||||
# define _PAGE_WRITEBACK (1<<2) /* write back */
|
||||
# define _PAGE_WRITETHRU (2<<2) /* write through */
|
||||
#else
|
||||
# define _PAGE_WRITEBACK (1<<2) /* assume write through */
|
||||
# define _PAGE_WRITETHRU (1<<2)
|
||||
#endif
|
||||
#define _PAGE_NOALLOC (3<<2) /* don't allocate cache,if not cached */
|
||||
#define _CACHE_MASK (3<<2)
|
||||
#define _PAGE_CA_BYPASS (0<<2) /* bypass, non-speculative */
|
||||
#define _PAGE_CA_WB (1<<2) /* write-back */
|
||||
#define _PAGE_CA_WT (2<<2) /* write-through */
|
||||
#define _PAGE_CA_MASK (3<<2)
|
||||
#define _PAGE_INVALID (3<<2)
|
||||
|
||||
#define _PAGE_USER (1<<4) /* user access (ring=1) */
|
||||
#define _PAGE_KERNEL (0<<4) /* kernel access (ring=0) */
|
||||
|
||||
/* Software */
|
||||
#define _PAGE_RW (1<<6) /* software: page writable */
|
||||
#define _PAGE_WRITABLE_BIT 6
|
||||
#define _PAGE_WRITABLE (1<<6) /* software: page writable */
|
||||
#define _PAGE_DIRTY (1<<7) /* software: page dirty */
|
||||
#define _PAGE_ACCESSED (1<<8) /* software: page accessed (read) */
|
||||
#define _PAGE_FILE (1<<9) /* nonlinear file mapping*/
|
||||
|
||||
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _CACHE_MASK | _PAGE_DIRTY)
|
||||
#define _PAGE_PRESENT ( _PAGE_VALID | _PAGE_WRITEBACK | _PAGE_ACCESSED)
|
||||
/* On older HW revisions, we always have to set bit 0 */
|
||||
#if XCHAL_HW_VERSION_MAJOR < 2000
|
||||
# define _PAGE_VALID (1<<0)
|
||||
#else
|
||||
# define _PAGE_VALID 0
|
||||
#endif
|
||||
|
||||
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
|
||||
#define _PAGE_PRESENT (_PAGE_VALID | _PAGE_CA_WB | _PAGE_ACCESSED)
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
|
||||
# define PAGE_NONE __pgprot(_PAGE_PRESENT)
|
||||
# define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_RW)
|
||||
# define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER)
|
||||
# define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER)
|
||||
# define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_KERNEL | _PAGE_WRENABLE)
|
||||
# define PAGE_INVALID __pgprot(_PAGE_USER)
|
||||
#define PAGE_NONE __pgprot(_PAGE_INVALID | _PAGE_USER | _PAGE_PROTNONE)
|
||||
#define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER)
|
||||
#define PAGE_COPY_EXEC __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_HW_EXEC)
|
||||
#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER)
|
||||
#define PAGE_READONLY_EXEC __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_HW_EXEC)
|
||||
#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_WRITABLE)
|
||||
#define PAGE_SHARED_EXEC \
|
||||
__pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_WRITABLE | _PAGE_HW_EXEC)
|
||||
#define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_HW_WRITE)
|
||||
#define PAGE_KERNEL_EXEC __pgprot(_PAGE_PRESENT|_PAGE_HW_WRITE|_PAGE_HW_EXEC)
|
||||
|
||||
# if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
# define PAGE_DIRECTORY __pgprot(_PAGE_VALID | _PAGE_ACCESSED | _PAGE_KERNEL)
|
||||
# else
|
||||
# define PAGE_DIRECTORY __pgprot(_PAGE_PRESENT | _PAGE_KERNEL)
|
||||
# endif
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||
# define _PAGE_DIRECTORY (_PAGE_VALID | _PAGE_ACCESSED)
|
||||
#else
|
||||
# define _PAGE_DIRECTORY (_PAGE_VALID | _PAGE_ACCESSED | _PAGE_CA_WB)
|
||||
#endif
|
||||
|
||||
#else /* no mmu */
|
||||
|
||||
|
|
@ -145,23 +156,23 @@
|
|||
* What follows is the closest we can get by reasonable means..
|
||||
* See linux/mm/mmap.c for protection_map[] array that uses these definitions.
|
||||
*/
|
||||
#define __P000 PAGE_NONE /* private --- */
|
||||
#define __P001 PAGE_READONLY /* private --r */
|
||||
#define __P010 PAGE_COPY /* private -w- */
|
||||
#define __P011 PAGE_COPY /* private -wr */
|
||||
#define __P100 PAGE_READONLY /* private x-- */
|
||||
#define __P101 PAGE_READONLY /* private x-r */
|
||||
#define __P110 PAGE_COPY /* private xw- */
|
||||
#define __P111 PAGE_COPY /* private xwr */
|
||||
#define __P000 PAGE_NONE /* private --- */
|
||||
#define __P001 PAGE_READONLY /* private --r */
|
||||
#define __P010 PAGE_COPY /* private -w- */
|
||||
#define __P011 PAGE_COPY /* private -wr */
|
||||
#define __P100 PAGE_READONLY_EXEC /* private x-- */
|
||||
#define __P101 PAGE_READONLY_EXEC /* private x-r */
|
||||
#define __P110 PAGE_COPY_EXEC /* private xw- */
|
||||
#define __P111 PAGE_COPY_EXEC /* private xwr */
|
||||
|
||||
#define __S000 PAGE_NONE /* shared --- */
|
||||
#define __S001 PAGE_READONLY /* shared --r */
|
||||
#define __S010 PAGE_SHARED /* shared -w- */
|
||||
#define __S011 PAGE_SHARED /* shared -wr */
|
||||
#define __S100 PAGE_READONLY /* shared x-- */
|
||||
#define __S101 PAGE_READONLY /* shared x-r */
|
||||
#define __S110 PAGE_SHARED /* shared xw- */
|
||||
#define __S111 PAGE_SHARED /* shared xwr */
|
||||
#define __S000 PAGE_NONE /* shared --- */
|
||||
#define __S001 PAGE_READONLY /* shared --r */
|
||||
#define __S010 PAGE_SHARED /* shared -w- */
|
||||
#define __S011 PAGE_SHARED /* shared -wr */
|
||||
#define __S100 PAGE_READONLY_EXEC /* shared x-- */
|
||||
#define __S101 PAGE_READONLY_EXEC /* shared x-r */
|
||||
#define __S110 PAGE_SHARED_EXEC /* shared xw- */
|
||||
#define __S111 PAGE_SHARED_EXEC /* shared xwr */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
|
|
@ -183,35 +194,42 @@ extern pgd_t swapper_pg_dir[PAGE_SIZE/sizeof(pgd_t)];
|
|||
#define pmd_page(pmd) virt_to_page(pmd_val(pmd))
|
||||
|
||||
/*
|
||||
* The following only work if pte_present() is true.
|
||||
* pte status.
|
||||
*/
|
||||
#define pte_none(pte) (!(pte_val(pte) ^ _PAGE_USER))
|
||||
#define pte_present(pte) (pte_val(pte) & _PAGE_VALID)
|
||||
#define pte_none(pte) (pte_val(pte) == _PAGE_INVALID)
|
||||
#define pte_present(pte) \
|
||||
(((pte_val(pte) & _PAGE_CA_MASK) != _PAGE_INVALID) \
|
||||
|| ((pte_val(pte) & _PAGE_PROTNONE) == _PAGE_PROTNONE))
|
||||
#define pte_clear(mm,addr,ptep) \
|
||||
do { update_pte(ptep, __pte(_PAGE_USER)); } while(0)
|
||||
do { update_pte(ptep, __pte(_PAGE_INVALID)); } while(0)
|
||||
|
||||
#define pmd_none(pmd) (!pmd_val(pmd))
|
||||
#define pmd_present(pmd) (pmd_val(pmd) & PAGE_MASK)
|
||||
#define pmd_clear(pmdp) do { set_pmd(pmdp, __pmd(0)); } while (0)
|
||||
#define pmd_bad(pmd) (pmd_val(pmd) & ~PAGE_MASK)
|
||||
#define pmd_clear(pmdp) do { set_pmd(pmdp, __pmd(0)); } while (0)
|
||||
|
||||
/* Note: We use the _PAGE_USER bit to indicate write-protect kernel memory */
|
||||
|
||||
static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; }
|
||||
static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITABLE; }
|
||||
static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; }
|
||||
static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; }
|
||||
static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; }
|
||||
static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~(_PAGE_RW | _PAGE_WRENABLE); return pte; }
|
||||
static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~_PAGE_DIRTY; return pte; }
|
||||
static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~_PAGE_ACCESSED; return pte; }
|
||||
static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; }
|
||||
static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; }
|
||||
static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_RW; return pte; }
|
||||
static inline pte_t pte_wrprotect(pte_t pte)
|
||||
{ pte_val(pte) &= ~(_PAGE_WRITABLE | _PAGE_HW_WRITE); return pte; }
|
||||
static inline pte_t pte_mkclean(pte_t pte)
|
||||
{ pte_val(pte) &= ~(_PAGE_DIRTY | _PAGE_HW_WRITE); return pte; }
|
||||
static inline pte_t pte_mkold(pte_t pte)
|
||||
{ pte_val(pte) &= ~_PAGE_ACCESSED; return pte; }
|
||||
static inline pte_t pte_mkdirty(pte_t pte)
|
||||
{ pte_val(pte) |= _PAGE_DIRTY; return pte; }
|
||||
static inline pte_t pte_mkyoung(pte_t pte)
|
||||
{ pte_val(pte) |= _PAGE_ACCESSED; return pte; }
|
||||
static inline pte_t pte_mkwrite(pte_t pte)
|
||||
{ pte_val(pte) |= _PAGE_WRITABLE; return pte; }
|
||||
|
||||
/*
|
||||
* Conversion functions: convert a page and protection to a page entry,
|
||||
* and a page entry and page directory to the page they refer to.
|
||||
*/
|
||||
|
||||
#define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT)
|
||||
#define pte_same(a,b) (pte_val(a) == pte_val(b))
|
||||
#define pte_page(x) pfn_to_page(pte_pfn(x))
|
||||
|
|
@ -232,8 +250,9 @@ static inline void update_pte(pte_t *ptep, pte_t pteval)
|
|||
{
|
||||
*ptep = pteval;
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE) && XCHAL_DCACHE_IS_WRITEBACK
|
||||
__asm__ __volatile__ ("memw; dhwb %0, 0; dsync" :: "a" (ptep));
|
||||
__asm__ __volatile__ ("dhwb %0, 0" :: "a" (ptep));
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
struct mm_struct;
|
||||
|
|
@ -249,9 +268,6 @@ static inline void
|
|||
set_pmd(pmd_t *pmdp, pmd_t pmdval)
|
||||
{
|
||||
*pmdp = pmdval;
|
||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE) && XCHAL_DCACHE_IS_WRITEBACK
|
||||
__asm__ __volatile__ ("memw; dhwb %0, 0; dsync" :: "a" (pmdp));
|
||||
#endif
|
||||
}
|
||||
|
||||
struct vm_area_struct;
|
||||
|
|
@ -306,52 +322,34 @@ ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
|||
|
||||
/*
|
||||
* Encode and decode a swap entry.
|
||||
* Each PTE in a process VM's page table is either:
|
||||
* "present" -- valid and not swapped out, protection bits are meaningful;
|
||||
* "not present" -- which further subdivides in these two cases:
|
||||
* "none" -- no mapping at all; identified by pte_none(), set by pte_clear(
|
||||
* "swapped out" -- the page is swapped out, and the SWP macros below
|
||||
* are used to store swap file info in the PTE itself.
|
||||
*
|
||||
* In the Xtensa processor MMU, any PTE entries in user space (or anywhere
|
||||
* in virtual memory that can map differently across address spaces)
|
||||
* must have a correct ring value that represents the RASID field that
|
||||
* is changed when switching address spaces. Eg. such PTE entries cannot
|
||||
* be set to ring zero, because that can cause a (global) kernel ASID
|
||||
* entry to be created in the TLBs (even with invalid cache attribute),
|
||||
* potentially causing a multihit exception when going back to another
|
||||
* address space that mapped the same virtual address at another ring.
|
||||
*
|
||||
* SO: we avoid using ring bits (_PAGE_RING_MASK) in "not present" PTEs.
|
||||
* We also avoid using the _PAGE_VALID bit which must be zero for non-present
|
||||
* pages.
|
||||
*
|
||||
* We end up with the following available bits: 1..3 and 7..31.
|
||||
* We don't bother with 1..3 for now (we can use them later if needed),
|
||||
* and chose to allocate 6 bits for SWP_TYPE and the remaining 19 bits
|
||||
* for SWP_OFFSET. At least 5 bits are needed for SWP_TYPE, because it
|
||||
* is currently implemented as an index into swap_info[MAX_SWAPFILES]
|
||||
* and MAX_SWAPFILES is currently defined as 32 in <linux/swap.h>.
|
||||
* However, for some reason all other architectures in the 2.4 kernel
|
||||
* reserve either 6, 7, or 8 bits so I'll not detract from that for now. :)
|
||||
* SWP_OFFSET is an offset into the swap file in page-size units, so
|
||||
* with 4 kB pages, 19 bits supports a maximum swap file size of 2 GB.
|
||||
*
|
||||
* FIXME: 2 GB isn't very big. Other bits can be used to allow
|
||||
* larger swap sizes. In the meantime, it appears relatively easy to get
|
||||
* around the 2 GB limitation by simply using multiple swap files.
|
||||
* Format of swap pte:
|
||||
* bit 0 MBZ
|
||||
* bit 1 page-file (must be zero)
|
||||
* bits 2 - 3 page hw access mode (must be 11: _PAGE_INVALID)
|
||||
* bits 4 - 5 ring protection (must be 01: _PAGE_USER)
|
||||
* bits 6 - 10 swap type (5 bits -> 32 types)
|
||||
* bits 11 - 31 swap offset / PAGE_SIZE (21 bits -> 8GB)
|
||||
|
||||
* Format of file pte:
|
||||
* bit 0 MBZ
|
||||
* bit 1 page-file (must be one: _PAGE_FILE)
|
||||
* bits 2 - 3 page hw access mode (must be 11: _PAGE_INVALID)
|
||||
* bits 4 - 5 ring protection (must be 01: _PAGE_USER)
|
||||
* bits 6 - 31 file offset / PAGE_SIZE
|
||||
*/
|
||||
|
||||
#define __swp_type(entry) (((entry).val >> 7) & 0x3f)
|
||||
#define __swp_offset(entry) ((entry).val >> 13)
|
||||
#define __swp_entry(type,offs) ((swp_entry_t) {((type) << 7) | ((offs) << 13)})
|
||||
#define __swp_type(entry) (((entry).val >> 6) & 0x1f)
|
||||
#define __swp_offset(entry) ((entry).val >> 11)
|
||||
#define __swp_entry(type,offs) \
|
||||
((swp_entry_t) {((type) << 6) | ((offs) << 11) | _PAGE_INVALID})
|
||||
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
|
||||
#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
|
||||
|
||||
#define PTE_FILE_MAX_BITS 29
|
||||
#define pte_to_pgoff(pte) (pte_val(pte) >> 3)
|
||||
#define pgoff_to_pte(off) ((pte_t) { ((off) << 3) | _PAGE_FILE })
|
||||
|
||||
#define PTE_FILE_MAX_BITS 28
|
||||
#define pte_to_pgoff(pte) (pte_val(pte) >> 4)
|
||||
#define pgoff_to_pte(off) \
|
||||
((pte_t) { ((off) << 4) | _PAGE_INVALID | _PAGE_FILE })
|
||||
|
||||
#endif /* !defined (__ASSEMBLY__) */
|
||||
|
||||
|
|
@ -394,13 +392,12 @@ extern void update_mmu_cache(struct vm_area_struct * vma,
|
|||
* remap a physical page `pfn' of size `size' with page protection `prot'
|
||||
* into virtual address `from'
|
||||
*/
|
||||
|
||||
#define io_remap_pfn_range(vma,from,pfn,size,prot) \
|
||||
remap_pfn_range(vma, from, pfn, size, prot)
|
||||
|
||||
|
||||
/* No page table caches to init */
|
||||
|
||||
#define pgtable_cache_init() do { } while (0)
|
||||
extern void pgtable_cache_init(void);
|
||||
|
||||
typedef pte_t *pte_addr_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
* the 1 GB requirement applies to the stack as well.
|
||||
*/
|
||||
|
||||
#define TASK_SIZE 0x40000000
|
||||
#define TASK_SIZE __XTENSA_UL_CONST(0x40000000)
|
||||
|
||||
/*
|
||||
* General exception cause assigned to debug exceptions. Debug exceptions go
|
||||
|
|
|
|||
|
|
@ -1,3 +1,13 @@
|
|||
/*
|
||||
* include/asm-xtensa/syscall.h
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001 - 2007 Tensilica Inc.
|
||||
*/
|
||||
|
||||
struct pt_regs;
|
||||
struct sigaction;
|
||||
asmlinkage long xtensa_execve(char*, char**, char**, struct pt_regs*);
|
||||
|
|
@ -17,4 +27,16 @@ asmlinkage long sys_rt_sigaction(int,
|
|||
const struct sigaction __user *,
|
||||
struct sigaction __user *,
|
||||
size_t);
|
||||
asmlinkage long xtensa_shmat(int shmid, char __user *shmaddr, int shmflg);
|
||||
asmlinkage long xtensa_shmat(int, char __user *, int);
|
||||
asmlinkage long xtensa_fadvise64_64(int, int,
|
||||
unsigned long long, unsigned long long);
|
||||
|
||||
/* Should probably move to linux/syscalls.h */
|
||||
struct pollfd;
|
||||
asmlinkage long sys_pselect6(int n, fd_set __user *inp, fd_set __user *outp,
|
||||
fd_set __user *exp, struct timespec __user *tsp, void __user *sig);
|
||||
asmlinkage long sys_ppoll(struct pollfd __user *ufds, unsigned int nfds,
|
||||
struct timespec __user *tsp, const sigset_t __user *sigmask,
|
||||
size_t sigsetsize);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -157,6 +157,7 @@ struct ktermios {
|
|||
#define HUPCL 0002000
|
||||
#define CLOCAL 0004000
|
||||
#define CBAUDEX 0010000
|
||||
#define BOTHER 0010000
|
||||
#define B57600 0010001
|
||||
#define B115200 0010002
|
||||
#define B230400 0010003
|
||||
|
|
@ -172,10 +173,12 @@ struct ktermios {
|
|||
#define B3000000 0010015
|
||||
#define B3500000 0010016
|
||||
#define B4000000 0010017
|
||||
#define CIBAUD 002003600000 /* input baud rate (not used) */
|
||||
#define CIBAUD 002003600000 /* input baud rate */
|
||||
#define CMSPAR 010000000000 /* mark or space (stick) parity */
|
||||
#define CRTSCTS 020000000000 /* flow control */
|
||||
|
||||
#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */
|
||||
|
||||
/* c_lflag bits */
|
||||
|
||||
#define ISIG 0000001
|
||||
|
|
|
|||
|
|
@ -95,8 +95,10 @@ struct termio {
|
|||
copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
|
||||
})
|
||||
|
||||
#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
|
||||
#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
|
||||
#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios2))
|
||||
#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2))
|
||||
#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))
|
||||
#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios))
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -41,10 +41,10 @@
|
|||
extern unsigned long ccount_per_jiffy;
|
||||
extern unsigned long ccount_nsec;
|
||||
#define CCOUNT_PER_JIFFY ccount_per_jiffy
|
||||
#define CCOUNT_NSEC ccount_nsec
|
||||
#define NSEC_PER_CCOUNT ccount_nsec
|
||||
#else
|
||||
#define CCOUNT_PER_JIFFY (CONFIG_XTENSA_CPU_CLOCK*(1000000UL/HZ))
|
||||
#define CCOUNT_NSEC (1000000000UL / CONFIG_XTENSA_CPU_CLOCK)
|
||||
#define NSEC_PER_CCOUNT (1000UL / CONFIG_XTENSA_CPU_CLOCK)
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -11,14 +11,36 @@
|
|||
#ifndef _XTENSA_TLB_H
|
||||
#define _XTENSA_TLB_H
|
||||
|
||||
#define tlb_start_vma(tlb,vma) do { } while (0)
|
||||
#define tlb_end_vma(tlb,vma) do { } while (0)
|
||||
#define __tlb_remove_tlb_entry(tlb,pte,addr) do { } while (0)
|
||||
#include <asm/cache.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
#if (DCACHE_WAY_SIZE <= PAGE_SIZE)
|
||||
|
||||
/* Note, read http://lkml.org/lkml/2004/1/15/6 */
|
||||
|
||||
# define tlb_start_vma(tlb,vma) do { } while (0)
|
||||
# define tlb_end_vma(tlb,vma) do { } while (0)
|
||||
|
||||
#else
|
||||
|
||||
# define tlb_start_vma(tlb, vma) \
|
||||
do { \
|
||||
if (!tlb->fullmm) \
|
||||
flush_cache_range(vma, vma->vm_start, vma->vm_end); \
|
||||
} while(0)
|
||||
|
||||
# define tlb_end_vma(tlb, vma) \
|
||||
do { \
|
||||
if (!tlb->fullmm) \
|
||||
flush_tlb_range(vma, vma->vm_start, vma->vm_end); \
|
||||
} while(0)
|
||||
|
||||
#endif
|
||||
|
||||
#define __tlb_remove_tlb_entry(tlb,pte,addr) do { } while (0)
|
||||
#define tlb_flush(tlb) flush_tlb_mm((tlb)->mm)
|
||||
|
||||
#include <asm-generic/tlb.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
#define __pte_free_tlb(tlb,pte) pte_free(pte)
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,15 @@
|
|||
#ifndef _XTENSA_TYPES_H
|
||||
#define _XTENSA_TYPES_H
|
||||
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
# define __XTENSA_UL(x) (x)
|
||||
# define __XTENSA_UL_CONST(x) x
|
||||
#else
|
||||
# define __XTENSA_UL(x) ((unsigned long)(x))
|
||||
# define __XTENSA_UL_CONST(x) x##UL
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
typedef unsigned short umode_t;
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ __SYSCALL( 61, sys_fcntl64, 3)
|
|||
#define __NR_available62 62
|
||||
__SYSCALL( 62, sys_ni_syscall, 0)
|
||||
#define __NR_fadvise64_64 63
|
||||
__SYSCALL( 63, sys_fadvise64_64, 6)
|
||||
__SYSCALL( 63, xtensa_fadvise64_64, 6)
|
||||
#define __NR_utime 64 /* glibc 2.3.3 ?? */
|
||||
__SYSCALL( 64, sys_utime, 2)
|
||||
#define __NR_utimes 65
|
||||
|
|
@ -339,8 +339,8 @@ __SYSCALL(148, sys_setpgid, 2)
|
|||
__SYSCALL(149, sys_getpgid, 1)
|
||||
#define __NR_getppid 150
|
||||
__SYSCALL(150, sys_getppid, 0)
|
||||
#define __NR_available151 151
|
||||
__SYSCALL(151, sys_ni_syscall, 0)
|
||||
#define __NR_getpgrp 151
|
||||
__SYSCALL(151, sys_getpgrp, 0)
|
||||
|
||||
#define __NR_reserved152 152 /* set_thread_area */
|
||||
__SYSCALL(152, sys_ni_syscall, 0)
|
||||
|
|
@ -577,7 +577,112 @@ __SYSCALL(258, sys_keyctl, 5)
|
|||
#define __NR_available259 259
|
||||
__SYSCALL(259, sys_ni_syscall, 0)
|
||||
|
||||
#define __NR_syscall_count 261
|
||||
|
||||
#define __NR_readahead 260
|
||||
__SYSCALL(260, sys_readahead, 5)
|
||||
#define __NR_remap_file_pages 261
|
||||
__SYSCALL(261, sys_remap_file_pages, 5)
|
||||
#define __NR_migrate_pages 262
|
||||
__SYSCALL(262, sys_migrate_pages, 0)
|
||||
#define __NR_mbind 263
|
||||
__SYSCALL(263, sys_mbind, 6)
|
||||
#define __NR_get_mempolicy 264
|
||||
__SYSCALL(264, sys_get_mempolicy, 5)
|
||||
#define __NR_set_mempolicy 265
|
||||
__SYSCALL(265, sys_set_mempolicy, 3)
|
||||
#define __NR_unshare 266
|
||||
__SYSCALL(266, sys_unshare, 1)
|
||||
#define __NR_move_pages 267
|
||||
__SYSCALL(267, sys_move_pages, 0)
|
||||
#define __NR_splice 268
|
||||
__SYSCALL(268, sys_splice, 0)
|
||||
#define __NR_tee 269
|
||||
__SYSCALL(269, sys_tee, 0)
|
||||
#define __NR_vmsplice 270
|
||||
__SYSCALL(270, sys_vmsplice, 0)
|
||||
#define __NR_available271 271
|
||||
__SYSCALL(271, sys_ni_syscall, 0)
|
||||
|
||||
#define __NR_pselect6 272
|
||||
__SYSCALL(272, sys_pselect6, 0)
|
||||
#define __NR_ppoll 273
|
||||
__SYSCALL(273, sys_ppoll, 0)
|
||||
#define __NR_epoll_pwait 274
|
||||
__SYSCALL(274, sys_epoll_pwait, 0)
|
||||
#define __NR_available275 275
|
||||
__SYSCALL(275, sys_ni_syscall, 0)
|
||||
|
||||
#define __NR_inotify_init 276
|
||||
__SYSCALL(276, sys_inotify_init, 0)
|
||||
#define __NR_inotify_add_watch 277
|
||||
__SYSCALL(277, sys_inotify_add_watch, 3)
|
||||
#define __NR_inotify_rm_watch 278
|
||||
__SYSCALL(278, sys_inotify_rm_watch, 2)
|
||||
#define __NR_available279 279
|
||||
__SYSCALL(279, sys_ni_syscall, 0)
|
||||
|
||||
#define __NR_getcpu 280
|
||||
__SYSCALL(280, sys_getcpu, 0)
|
||||
#define __NR_kexec_load 281
|
||||
__SYSCALL(281, sys_ni_syscall, 0)
|
||||
|
||||
#define __NR_ioprio_set 282
|
||||
__SYSCALL(282, sys_ioprio_set, 2)
|
||||
#define __NR_ioprio_get 283
|
||||
__SYSCALL(283, sys_ioprio_get, 3)
|
||||
|
||||
#define __NR_set_robust_list 284
|
||||
__SYSCALL(284, sys_set_robust_list, 3)
|
||||
#define __NR_get_robust_list 285
|
||||
__SYSCALL(285, sys_get_robust_list, 3)
|
||||
#define __NR_reserved286 286 /* sync_file_rangeX */
|
||||
__SYSCALL(286, sys_ni_syscall, 3)
|
||||
#define __NR_available287 287
|
||||
__SYSCALL(287, sys_faccessat, 0)
|
||||
|
||||
/* Relative File Operations */
|
||||
|
||||
#define __NR_openat 288
|
||||
__SYSCALL(288, sys_openat, 4)
|
||||
#define __NR_mkdirat 289
|
||||
__SYSCALL(289, sys_mkdirat, 3)
|
||||
#define __NR_mknodat 290
|
||||
__SYSCALL(290, sys_mknodat, 4)
|
||||
#define __NR_unlinkat 291
|
||||
__SYSCALL(291, sys_unlinkat, 3)
|
||||
#define __NR_renameat 292
|
||||
__SYSCALL(292, sys_renameat, 4)
|
||||
#define __NR_linkat 293
|
||||
__SYSCALL(293, sys_linkat, 5)
|
||||
#define __NR_symlinkat 294
|
||||
__SYSCALL(294, sys_symlinkat, 3)
|
||||
#define __NR_readlinkat 295
|
||||
__SYSCALL(295, sys_readlinkat, 4)
|
||||
#define __NR_utimensat 296
|
||||
__SYSCALL(296, sys_utimensat, 0)
|
||||
#define __NR_fchownat 297
|
||||
__SYSCALL(297, sys_fchownat, 5)
|
||||
#define __NR_futimesat 298
|
||||
__SYSCALL(298, sys_futimesat, 4)
|
||||
#define __NR_fstatat64 299
|
||||
__SYSCALL(299, sys_fstatat64, 0)
|
||||
#define __NR_fchmodat 300
|
||||
__SYSCALL(300, sys_fchmodat, 4)
|
||||
#define __NR_faccessat 301
|
||||
__SYSCALL(301, sys_faccessat, 4)
|
||||
#define __NR_available302 302
|
||||
__SYSCALL(302, sys_ni_syscall, 0)
|
||||
#define __NR_available303 303
|
||||
__SYSCALL(303, sys_ni_syscall, 0)
|
||||
|
||||
#define __NR_signalfd 304
|
||||
__SYSCALL(304, sys_signalfd, 3)
|
||||
#define __NR_timerfd 305
|
||||
__SYSCALL(305, sys_timerfd, 4)
|
||||
#define __NR_eventfd 306
|
||||
__SYSCALL(306, sys_eventfd, 1)
|
||||
|
||||
#define __NR_syscall_count 307
|
||||
|
||||
/*
|
||||
* sysxtensa syscall handler
|
||||
|
|
@ -612,8 +717,19 @@ __SYSCALL(259, sys_ni_syscall, 0)
|
|||
#define __ARCH_WANT_SYS_LLSEEK
|
||||
#define __ARCH_WANT_SYS_RT_SIGACTION
|
||||
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
|
||||
#define __ARCH_WANT_SYS_GETPGRP
|
||||
|
||||
/*
|
||||
* Ignore legacy system calls in the checksyscalls.sh script
|
||||
*/
|
||||
|
||||
#define __IGNORE_fork /* use clone */
|
||||
#define __IGNORE_time
|
||||
#define __IGNORE_alarm /* use setitimer */
|
||||
#define __IGNORE_pause
|
||||
#define __IGNORE_mmap /* use mmap2 */
|
||||
#define __IGNORE_vfork /* use clone */
|
||||
#define __IGNORE_fadvise64 /* use fadvise64_64 */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _XTENSA_UNISTD_H */
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ header-y += raid/
|
|||
header-y += spi/
|
||||
header-y += sunrpc/
|
||||
header-y += tc_act/
|
||||
header-y += tc_ematch/
|
||||
header-y += netfilter/
|
||||
header-y += netfilter_arp/
|
||||
header-y += netfilter_bridge/
|
||||
|
|
|
|||
|
|
@ -15,11 +15,26 @@ extern int pci_disable_pcie_error_reporting(struct pci_dev *dev);
|
|||
extern int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
|
||||
extern int pci_cleanup_aer_correct_error_status(struct pci_dev *dev);
|
||||
#else
|
||||
#define pci_enable_pcie_error_reporting(dev) (-EINVAL)
|
||||
#define pci_find_aer_capability(dev) (0)
|
||||
#define pci_disable_pcie_error_reporting(dev) (-EINVAL)
|
||||
#define pci_cleanup_aer_uncorrect_error_status(dev) (-EINVAL)
|
||||
#define pci_cleanup_aer_correct_error_status(dev) (-EINVAL)
|
||||
static inline int pci_enable_pcie_error_reporting(struct pci_dev *dev)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
static inline int pci_find_aer_capability(struct pci_dev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pci_disable_pcie_error_reporting(struct pci_dev *dev)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
static inline int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
static inline int pci_cleanup_aer_correct_error_status(struct pci_dev *dev)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //_AER_H_
|
||||
|
|
|
|||
|
|
@ -73,6 +73,19 @@ enum {
|
|||
ATA_PIO5 = ATA_PIO4 | (1 << 5),
|
||||
ATA_PIO6 = ATA_PIO5 | (1 << 6),
|
||||
|
||||
ATA_SWDMA0 = (1 << 0),
|
||||
ATA_SWDMA1 = ATA_SWDMA0 | (1 << 1),
|
||||
ATA_SWDMA2 = ATA_SWDMA1 | (1 << 2),
|
||||
|
||||
ATA_SWDMA2_ONLY = (1 << 2),
|
||||
|
||||
ATA_MWDMA0 = (1 << 0),
|
||||
ATA_MWDMA1 = ATA_MWDMA0 | (1 << 1),
|
||||
ATA_MWDMA2 = ATA_MWDMA1 | (1 << 2),
|
||||
|
||||
ATA_MWDMA12_ONLY = (1 << 1) | (1 << 2),
|
||||
ATA_MWDMA2_ONLY = (1 << 2),
|
||||
|
||||
ATA_UDMA0 = (1 << 0),
|
||||
ATA_UDMA1 = ATA_UDMA0 | (1 << 1),
|
||||
ATA_UDMA2 = ATA_UDMA1 | (1 << 2),
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@
|
|||
#define AUDIT_ADD_RULE 1011 /* Add syscall filtering rule */
|
||||
#define AUDIT_DEL_RULE 1012 /* Delete syscall filtering rule */
|
||||
#define AUDIT_LIST_RULES 1013 /* List syscall filtering rules */
|
||||
#define AUDIT_TTY_GET 1014 /* Get TTY auditing status */
|
||||
#define AUDIT_TTY_SET 1015 /* Set TTY auditing status */
|
||||
#define AUDIT_TTY_GET 1016 /* Get TTY auditing status */
|
||||
#define AUDIT_TTY_SET 1017 /* Set TTY auditing status */
|
||||
|
||||
#define AUDIT_FIRST_USER_MSG 1100 /* Userspace messages mostly uninteresting to kernel */
|
||||
#define AUDIT_USER_AVC 1107 /* We filter this differently */
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue