Merge branch 'master'
This commit is contained in:
commit
4bf311ddfb
10
CREDITS
10
CREDITS
|
@ -528,11 +528,11 @@ S: Oxford
|
|||
S: United Kingdom
|
||||
|
||||
N: Luiz Fernando N. Capitulino
|
||||
E: lcapitulino@terra.com.br
|
||||
E: lcapitulino@prefeitura.sp.gov.br
|
||||
W: http://www.telecentros.sp.gov.br
|
||||
D: Little fixes and a lot of janitorial work
|
||||
S: E-GOV Telecentros SP
|
||||
E: lcapitulino@mandriva.com.br
|
||||
E: lcapitulino@gmail.com
|
||||
W: http://www.cpu.eti.br
|
||||
D: misc kernel hacking
|
||||
S: Mandriva
|
||||
S: Brazil
|
||||
|
||||
N: Remy Card
|
||||
|
|
|
@ -698,12 +698,12 @@ these interfaces. Remember that, as defined, consistent mappings are
|
|||
always going to be SAC addressable.
|
||||
|
||||
The first thing your driver needs to do is query the PCI platform
|
||||
layer with your devices DAC addressing capabilities:
|
||||
layer if it is capable of handling your devices DAC addressing
|
||||
capabilities:
|
||||
|
||||
int pci_dac_set_dma_mask(struct pci_dev *pdev, u64 mask);
|
||||
int pci_dac_dma_supported(struct pci_dev *hwdev, u64 mask);
|
||||
|
||||
This routine behaves identically to pci_set_dma_mask. You may not
|
||||
use the following interfaces if this routine fails.
|
||||
You may not use the following interfaces if this routine fails.
|
||||
|
||||
Next, DMA addresses using this API are kept track of using the
|
||||
dma64_addr_t type. It is guaranteed to be big enough to hold any
|
||||
|
|
|
@ -687,8 +687,9 @@ diff shows how closely related RCU and reader-writer locking can be.
|
|||
+ spin_lock(&listmutex);
|
||||
list_for_each_entry(p, head, lp) {
|
||||
if (p->key == key) {
|
||||
list_del(&p->list);
|
||||
- list_del(&p->list);
|
||||
- write_unlock(&listmutex);
|
||||
+ list_del_rcu(&p->list);
|
||||
+ spin_unlock(&listmutex);
|
||||
+ synchronize_rcu();
|
||||
kfree(p);
|
||||
|
@ -736,7 +737,7 @@ Or, for those who prefer a side-by-side listing:
|
|||
5 write_lock(&listmutex); 5 spin_lock(&listmutex);
|
||||
6 list_for_each_entry(p, head, lp) { 6 list_for_each_entry(p, head, lp) {
|
||||
7 if (p->key == key) { 7 if (p->key == key) {
|
||||
8 list_del(&p->list); 8 list_del(&p->list);
|
||||
8 list_del(&p->list); 8 list_del_rcu(&p->list);
|
||||
9 write_unlock(&listmutex); 9 spin_unlock(&listmutex);
|
||||
10 synchronize_rcu();
|
||||
10 kfree(p); 11 kfree(p);
|
||||
|
|
|
@ -1,57 +1,63 @@
|
|||
Linux Kernel patch sumbittal checklist
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Here are some basic things that developers should do if they
|
||||
want to see their kernel patch submittals accepted quicker.
|
||||
Here are some basic things that developers should do if they want to see their
|
||||
kernel patch submissions accepted more quickly.
|
||||
|
||||
These are all above and beyond the documentation that is provided
|
||||
in Documentation/SubmittingPatches and elsewhere about submitting
|
||||
Linux kernel patches.
|
||||
These are all above and beyond the documentation that is provided in
|
||||
Documentation/SubmittingPatches and elsewhere regarding submitting Linux
|
||||
kernel patches.
|
||||
|
||||
|
||||
|
||||
- Builds cleanly with applicable or modified CONFIG options =y, =m, and =n.
|
||||
No gcc warnings/errors, no linker warnings/errors.
|
||||
1: Builds cleanly with applicable or modified CONFIG options =y, =m, and
|
||||
=n. No gcc warnings/errors, no linker warnings/errors.
|
||||
|
||||
- Passes allnoconfig, allmodconfig
|
||||
2: Passes allnoconfig, allmodconfig
|
||||
|
||||
- Builds on multiple CPU arch-es by using local cross-compile tools
|
||||
or something like PLM at OSDL.
|
||||
3: Builds on multiple CPU architectures by using local cross-compile tools
|
||||
or something like PLM at OSDL.
|
||||
|
||||
- ppc64 is a good architecture for cross-compilation checking because it
|
||||
tends to use `unsigned long' for 64-bit quantities.
|
||||
4: ppc64 is a good architecture for cross-compilation checking because it
|
||||
tends to use `unsigned long' for 64-bit quantities.
|
||||
|
||||
- Matches kernel coding style(!)
|
||||
5: Matches kernel coding style(!)
|
||||
|
||||
- Any new or modified CONFIG options don't muck up the config menu.
|
||||
6: Any new or modified CONFIG options don't muck up the config menu.
|
||||
|
||||
- All new Kconfig options have help text.
|
||||
7: All new Kconfig options have help text.
|
||||
|
||||
- Has been carefully reviewed with respect to relevant Kconfig
|
||||
combinations. This is very hard to get right with testing --
|
||||
brainpower pays off here.
|
||||
8: Has been carefully reviewed with respect to relevant Kconfig
|
||||
combinations. This is very hard to get right with testing -- brainpower
|
||||
pays off here.
|
||||
|
||||
- Check cleanly with sparse.
|
||||
9: Check cleanly with sparse.
|
||||
|
||||
- Use 'make checkstack' and 'make namespacecheck' and fix any
|
||||
problems that they find. Note: checkstack does not point out
|
||||
problems explicitly, but any one function that uses more than
|
||||
512 bytes on the stack is a candidate for change.
|
||||
10: Use 'make checkstack' and 'make namespacecheck' and fix any problems
|
||||
that they find. Note: checkstack does not point out problems explicitly,
|
||||
but any one function that uses more than 512 bytes on the stack is a
|
||||
candidate for change.
|
||||
|
||||
- Include kernel-doc to document global kernel APIs. (Not required
|
||||
for static functions, but OK there also.) Use 'make htmldocs'
|
||||
or 'make mandocs' to check the kernel-doc and fix any issues.
|
||||
11: Include kernel-doc to document global kernel APIs. (Not required for
|
||||
static functions, but OK there also.) Use 'make htmldocs' or 'make
|
||||
mandocs' to check the kernel-doc and fix any issues.
|
||||
|
||||
- Has been tested with CONFIG_PREEMPT, CONFIG_DEBUG_PREEMPT,
|
||||
CONFIG_DEBUG_SLAB, CONFIG_DEBUG_PAGEALLOC, CONFIG_DEBUG_MUTEXES,
|
||||
CONFIG_DEBUG_SPINLOCK, CONFIG_DEBUG_SPINLOCK_SLEEP all simultaneously
|
||||
enabled.
|
||||
12: Has been tested with CONFIG_PREEMPT, CONFIG_DEBUG_PREEMPT,
|
||||
CONFIG_DEBUG_SLAB, CONFIG_DEBUG_PAGEALLOC, CONFIG_DEBUG_MUTEXES,
|
||||
CONFIG_DEBUG_SPINLOCK, CONFIG_DEBUG_SPINLOCK_SLEEP all simultaneously
|
||||
enabled.
|
||||
|
||||
- Has been build- and runtime tested with and without CONFIG_SMP and
|
||||
CONFIG_PREEMPT.
|
||||
13: Has been build- and runtime tested with and without CONFIG_SMP and
|
||||
CONFIG_PREEMPT.
|
||||
|
||||
- If the patch affects IO/Disk, etc: has been tested with and without
|
||||
CONFIG_LBD.
|
||||
14: If the patch affects IO/Disk, etc: has been tested with and without
|
||||
CONFIG_LBD.
|
||||
|
||||
15: All codepaths have been exercised with all lockdep features enabled.
|
||||
|
||||
2006-APR-27
|
||||
16: All new /proc entries are documented under Documentation/
|
||||
|
||||
17: All new kernel boot parameters are documented in
|
||||
Documentation/kernel-parameters.txt.
|
||||
|
||||
18: All new module parameters are documented with MODULE_PARM_DESC()
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
Delay accounting
|
||||
----------------
|
||||
|
||||
Tasks encounter delays in execution when they wait
|
||||
for some kernel resource to become available e.g. a
|
||||
runnable task may wait for a free CPU to run on.
|
||||
|
||||
The per-task delay accounting functionality measures
|
||||
the delays experienced by a task while
|
||||
|
||||
a) waiting for a CPU (while being runnable)
|
||||
b) completion of synchronous block I/O initiated by the task
|
||||
c) swapping in pages
|
||||
|
||||
and makes these statistics available to userspace through
|
||||
the taskstats interface.
|
||||
|
||||
Such delays provide feedback for setting a task's cpu priority,
|
||||
io priority and rss limit values appropriately. Long delays for
|
||||
important tasks could be a trigger for raising its corresponding priority.
|
||||
|
||||
The functionality, through its use of the taskstats interface, also provides
|
||||
delay statistics aggregated for all tasks (or threads) belonging to a
|
||||
thread group (corresponding to a traditional Unix process). This is a commonly
|
||||
needed aggregation that is more efficiently done by the kernel.
|
||||
|
||||
Userspace utilities, particularly resource management applications, can also
|
||||
aggregate delay statistics into arbitrary groups. To enable this, delay
|
||||
statistics of a task are available both during its lifetime as well as on its
|
||||
exit, ensuring continuous and complete monitoring can be done.
|
||||
|
||||
|
||||
Interface
|
||||
---------
|
||||
|
||||
Delay accounting uses the taskstats interface which is described
|
||||
in detail in a separate document in this directory. Taskstats returns a
|
||||
generic data structure to userspace corresponding to per-pid and per-tgid
|
||||
statistics. The delay accounting functionality populates specific fields of
|
||||
this structure. See
|
||||
include/linux/taskstats.h
|
||||
for a description of the fields pertaining to delay accounting.
|
||||
It will generally be in the form of counters returning the cumulative
|
||||
delay seen for cpu, sync block I/O, swapin etc.
|
||||
|
||||
Taking the difference of two successive readings of a given
|
||||
counter (say cpu_delay_total) for a task will give the delay
|
||||
experienced by the task waiting for the corresponding resource
|
||||
in that interval.
|
||||
|
||||
When a task exits, records containing the per-task statistics
|
||||
are sent to userspace without requiring a command. If it is the last exiting
|
||||
task of a thread group, the per-tgid statistics are also sent. More details
|
||||
are given in the taskstats interface description.
|
||||
|
||||
The getdelays.c userspace utility in this directory allows simple commands to
|
||||
be run and the corresponding delay statistics to be displayed. It also serves
|
||||
as an example of using the taskstats interface.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Compile the kernel with
|
||||
CONFIG_TASK_DELAY_ACCT=y
|
||||
CONFIG_TASKSTATS=y
|
||||
|
||||
Enable the accounting at boot time by adding
|
||||
the following to the kernel boot options
|
||||
delayacct
|
||||
|
||||
and after the system has booted up, use a utility
|
||||
similar to getdelays.c to access the delays
|
||||
seen by a given task or a task group (tgid).
|
||||
The utility also allows a given command to be
|
||||
executed and the corresponding delays to be
|
||||
seen.
|
||||
|
||||
General format of the getdelays command
|
||||
|
||||
getdelays [-t tgid] [-p pid] [-c cmd...]
|
||||
|
||||
|
||||
Get delays, since system boot, for pid 10
|
||||
# ./getdelays -p 10
|
||||
(output similar to next case)
|
||||
|
||||
Get sum of delays, since system boot, for all pids with tgid 5
|
||||
# ./getdelays -t 5
|
||||
|
||||
|
||||
CPU count real total virtual total delay total
|
||||
7876 92005750 100000000 24001500
|
||||
IO count delay total
|
||||
0 0
|
||||
MEM count delay total
|
||||
0 0
|
||||
|
||||
Get delays seen in executing a given simple command
|
||||
# ./getdelays -c ls /
|
||||
|
||||
bin data1 data3 data5 dev home media opt root srv sys usr
|
||||
boot data2 data4 data6 etc lib mnt proc sbin subdomain tmp var
|
||||
|
||||
|
||||
CPU count real total virtual total delay total
|
||||
6 4000250 4000000 0
|
||||
IO count delay total
|
||||
0 0
|
||||
MEM count delay total
|
||||
0 0
|
|
@ -0,0 +1,396 @@
|
|||
/* getdelays.c
|
||||
*
|
||||
* Utility to get per-pid and per-tgid delay accounting statistics
|
||||
* Also illustrates usage of the taskstats interface
|
||||
*
|
||||
* Copyright (C) Shailabh Nagar, IBM Corp. 2005
|
||||
* Copyright (C) Balbir Singh, IBM Corp. 2006
|
||||
* Copyright (c) Jay Lan, SGI. 2006
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <poll.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include <linux/genetlink.h>
|
||||
#include <linux/taskstats.h>
|
||||
|
||||
/*
|
||||
* Generic macros for dealing with netlink sockets. Might be duplicated
|
||||
* elsewhere. It is recommended that commercial grade applications use
|
||||
* libnl or libnetlink and use the interfaces provided by the library
|
||||
*/
|
||||
#define GENLMSG_DATA(glh) ((void *)(NLMSG_DATA(glh) + GENL_HDRLEN))
|
||||
#define GENLMSG_PAYLOAD(glh) (NLMSG_PAYLOAD(glh, 0) - GENL_HDRLEN)
|
||||
#define NLA_DATA(na) ((void *)((char*)(na) + NLA_HDRLEN))
|
||||
#define NLA_PAYLOAD(len) (len - NLA_HDRLEN)
|
||||
|
||||
#define err(code, fmt, arg...) do { printf(fmt, ##arg); exit(code); } while (0)
|
||||
int done = 0;
|
||||
int rcvbufsz=0;
|
||||
|
||||
char name[100];
|
||||
int dbg=0, print_delays=0;
|
||||
__u64 stime, utime;
|
||||
#define PRINTF(fmt, arg...) { \
|
||||
if (dbg) { \
|
||||
printf(fmt, ##arg); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* Maximum size of response requested or message sent */
|
||||
#define MAX_MSG_SIZE 256
|
||||
/* Maximum number of cpus expected to be specified in a cpumask */
|
||||
#define MAX_CPUS 32
|
||||
/* Maximum length of pathname to log file */
|
||||
#define MAX_FILENAME 256
|
||||
|
||||
struct msgtemplate {
|
||||
struct nlmsghdr n;
|
||||
struct genlmsghdr g;
|
||||
char buf[MAX_MSG_SIZE];
|
||||
};
|
||||
|
||||
char cpumask[100+6*MAX_CPUS];
|
||||
|
||||
/*
|
||||
* Create a raw netlink socket and bind
|
||||
*/
|
||||
static int create_nl_socket(int protocol)
|
||||
{
|
||||
int fd;
|
||||
struct sockaddr_nl local;
|
||||
|
||||
fd = socket(AF_NETLINK, SOCK_RAW, protocol);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
if (rcvbufsz)
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF,
|
||||
&rcvbufsz, sizeof(rcvbufsz)) < 0) {
|
||||
printf("Unable to set socket rcv buf size to %d\n",
|
||||
rcvbufsz);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(&local, 0, sizeof(local));
|
||||
local.nl_family = AF_NETLINK;
|
||||
|
||||
if (bind(fd, (struct sockaddr *) &local, sizeof(local)) < 0)
|
||||
goto error;
|
||||
|
||||
return fd;
|
||||
error:
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int send_cmd(int sd, __u16 nlmsg_type, __u32 nlmsg_pid,
|
||||
__u8 genl_cmd, __u16 nla_type,
|
||||
void *nla_data, int nla_len)
|
||||
{
|
||||
struct nlattr *na;
|
||||
struct sockaddr_nl nladdr;
|
||||
int r, buflen;
|
||||
char *buf;
|
||||
|
||||
struct msgtemplate msg;
|
||||
|
||||
msg.n.nlmsg_len = NLMSG_LENGTH(GENL_HDRLEN);
|
||||
msg.n.nlmsg_type = nlmsg_type;
|
||||
msg.n.nlmsg_flags = NLM_F_REQUEST;
|
||||
msg.n.nlmsg_seq = 0;
|
||||
msg.n.nlmsg_pid = nlmsg_pid;
|
||||
msg.g.cmd = genl_cmd;
|
||||
msg.g.version = 0x1;
|
||||
na = (struct nlattr *) GENLMSG_DATA(&msg);
|
||||
na->nla_type = nla_type;
|
||||
na->nla_len = nla_len + 1 + NLA_HDRLEN;
|
||||
memcpy(NLA_DATA(na), nla_data, nla_len);
|
||||
msg.n.nlmsg_len += NLMSG_ALIGN(na->nla_len);
|
||||
|
||||
buf = (char *) &msg;
|
||||
buflen = msg.n.nlmsg_len ;
|
||||
memset(&nladdr, 0, sizeof(nladdr));
|
||||
nladdr.nl_family = AF_NETLINK;
|
||||
while ((r = sendto(sd, buf, buflen, 0, (struct sockaddr *) &nladdr,
|
||||
sizeof(nladdr))) < buflen) {
|
||||
if (r > 0) {
|
||||
buf += r;
|
||||
buflen -= r;
|
||||
} else if (errno != EAGAIN)
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Probe the controller in genetlink to find the family id
|
||||
* for the TASKSTATS family
|
||||
*/
|
||||
int get_family_id(int sd)
|
||||
{
|
||||
struct {
|
||||
struct nlmsghdr n;
|
||||
struct genlmsghdr g;
|
||||
char buf[256];
|
||||
} ans;
|
||||
|
||||
int id, rc;
|
||||
struct nlattr *na;
|
||||
int rep_len;
|
||||
|
||||
strcpy(name, TASKSTATS_GENL_NAME);
|
||||
rc = send_cmd(sd, GENL_ID_CTRL, getpid(), CTRL_CMD_GETFAMILY,
|
||||
CTRL_ATTR_FAMILY_NAME, (void *)name,
|
||||
strlen(TASKSTATS_GENL_NAME)+1);
|
||||
|
||||
rep_len = recv(sd, &ans, sizeof(ans), 0);
|
||||
if (ans.n.nlmsg_type == NLMSG_ERROR ||
|
||||
(rep_len < 0) || !NLMSG_OK((&ans.n), rep_len))
|
||||
return 0;
|
||||
|
||||
na = (struct nlattr *) GENLMSG_DATA(&ans);
|
||||
na = (struct nlattr *) ((char *) na + NLA_ALIGN(na->nla_len));
|
||||
if (na->nla_type == CTRL_ATTR_FAMILY_ID) {
|
||||
id = *(__u16 *) NLA_DATA(na);
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
void print_delayacct(struct taskstats *t)
|
||||
{
|
||||
printf("\n\nCPU %15s%15s%15s%15s\n"
|
||||
" %15llu%15llu%15llu%15llu\n"
|
||||
"IO %15s%15s\n"
|
||||
" %15llu%15llu\n"
|
||||
"MEM %15s%15s\n"
|
||||
" %15llu%15llu\n\n",
|
||||
"count", "real total", "virtual total", "delay total",
|
||||
t->cpu_count, t->cpu_run_real_total, t->cpu_run_virtual_total,
|
||||
t->cpu_delay_total,
|
||||
"count", "delay total",
|
||||
t->blkio_count, t->blkio_delay_total,
|
||||
"count", "delay total", t->swapin_count, t->swapin_delay_total);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int c, rc, rep_len, aggr_len, len2, cmd_type;
|
||||
__u16 id;
|
||||
__u32 mypid;
|
||||
|
||||
struct nlattr *na;
|
||||
int nl_sd = -1;
|
||||
int len = 0;
|
||||
pid_t tid = 0;
|
||||
pid_t rtid = 0;
|
||||
|
||||
int fd = 0;
|
||||
int count = 0;
|
||||
int write_file = 0;
|
||||
int maskset = 0;
|
||||
char logfile[128];
|
||||
int loop = 0;
|
||||
|
||||
struct msgtemplate msg;
|
||||
|
||||
while (1) {
|
||||
c = getopt(argc, argv, "dw:r:m:t:p:v:l");
|
||||
if (c < 0)
|
||||
break;
|
||||
|
||||
switch (c) {
|
||||
case 'd':
|
||||
printf("print delayacct stats ON\n");
|
||||
print_delays = 1;
|
||||
break;
|
||||
case 'w':
|
||||
strncpy(logfile, optarg, MAX_FILENAME);
|
||||
printf("write to file %s\n", logfile);
|
||||
write_file = 1;
|
||||
break;
|
||||
case 'r':
|
||||
rcvbufsz = atoi(optarg);
|
||||
printf("receive buf size %d\n", rcvbufsz);
|
||||
if (rcvbufsz < 0)
|
||||
err(1, "Invalid rcv buf size\n");
|
||||
break;
|
||||
case 'm':
|
||||
strncpy(cpumask, optarg, sizeof(cpumask));
|
||||
maskset = 1;
|
||||
printf("cpumask %s maskset %d\n", cpumask, maskset);
|
||||
break;
|
||||
case 't':
|
||||
tid = atoi(optarg);
|
||||
if (!tid)
|
||||
err(1, "Invalid tgid\n");
|
||||
cmd_type = TASKSTATS_CMD_ATTR_TGID;
|
||||
print_delays = 1;
|
||||
break;
|
||||
case 'p':
|
||||
tid = atoi(optarg);
|
||||
if (!tid)
|
||||
err(1, "Invalid pid\n");
|
||||
cmd_type = TASKSTATS_CMD_ATTR_PID;
|
||||
print_delays = 1;
|
||||
break;
|
||||
case 'v':
|
||||
printf("debug on\n");
|
||||
dbg = 1;
|
||||
break;
|
||||
case 'l':
|
||||
printf("listen forever\n");
|
||||
loop = 1;
|
||||
break;
|
||||
default:
|
||||
printf("Unknown option %d\n", c);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
if (write_file) {
|
||||
fd = open(logfile, O_WRONLY | O_CREAT | O_TRUNC,
|
||||
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
||||
if (fd == -1) {
|
||||
perror("Cannot open output file\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if ((nl_sd = create_nl_socket(NETLINK_GENERIC)) < 0)
|
||||
err(1, "error creating Netlink socket\n");
|
||||
|
||||
|
||||
mypid = getpid();
|
||||
id = get_family_id(nl_sd);
|
||||
if (!id) {
|
||||
printf("Error getting family id, errno %d", errno);
|
||||
goto err;
|
||||
}
|
||||
PRINTF("family id %d\n", id);
|
||||
|
||||
if (maskset) {
|
||||
rc = send_cmd(nl_sd, id, mypid, TASKSTATS_CMD_GET,
|
||||
TASKSTATS_CMD_ATTR_REGISTER_CPUMASK,
|
||||
&cpumask, sizeof(cpumask));
|
||||
PRINTF("Sent register cpumask, retval %d\n", rc);
|
||||
if (rc < 0) {
|
||||
printf("error sending register cpumask\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (tid) {
|
||||
rc = send_cmd(nl_sd, id, mypid, TASKSTATS_CMD_GET,
|
||||
cmd_type, &tid, sizeof(__u32));
|
||||
PRINTF("Sent pid/tgid, retval %d\n", rc);
|
||||
if (rc < 0) {
|
||||
printf("error sending tid/tgid cmd\n");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
int i;
|
||||
|
||||
rep_len = recv(nl_sd, &msg, sizeof(msg), 0);
|
||||
PRINTF("received %d bytes\n", rep_len);
|
||||
|
||||
if (rep_len < 0) {
|
||||
printf("nonfatal reply error: errno %d\n", errno);
|
||||
continue;
|
||||
}
|
||||
if (msg.n.nlmsg_type == NLMSG_ERROR ||
|
||||
!NLMSG_OK((&msg.n), rep_len)) {
|
||||
printf("fatal reply error, errno %d\n", errno);
|
||||
goto done;
|
||||
}
|
||||
|
||||
PRINTF("nlmsghdr size=%d, nlmsg_len=%d, rep_len=%d\n",
|
||||
sizeof(struct nlmsghdr), msg.n.nlmsg_len, rep_len);
|
||||
|
||||
|
||||
rep_len = GENLMSG_PAYLOAD(&msg.n);
|
||||
|
||||
na = (struct nlattr *) GENLMSG_DATA(&msg);
|
||||
len = 0;
|
||||
i = 0;
|
||||
while (len < rep_len) {
|
||||
len += NLA_ALIGN(na->nla_len);
|
||||
switch (na->nla_type) {
|
||||
case TASKSTATS_TYPE_AGGR_TGID:
|
||||
/* Fall through */
|
||||
case TASKSTATS_TYPE_AGGR_PID:
|
||||
aggr_len = NLA_PAYLOAD(na->nla_len);
|
||||
len2 = 0;
|
||||
/* For nested attributes, na follows */
|
||||
na = (struct nlattr *) NLA_DATA(na);
|
||||
done = 0;
|
||||
while (len2 < aggr_len) {
|
||||
switch (na->nla_type) {
|
||||
case TASKSTATS_TYPE_PID:
|
||||
rtid = *(int *) NLA_DATA(na);
|
||||
if (print_delays)
|
||||
printf("PID\t%d\n", rtid);
|
||||
break;
|
||||
case TASKSTATS_TYPE_TGID:
|
||||
rtid = *(int *) NLA_DATA(na);
|
||||
if (print_delays)
|
||||
printf("TGID\t%d\n", rtid);
|
||||
break;
|
||||
case TASKSTATS_TYPE_STATS:
|
||||
count++;
|
||||
if (print_delays)
|
||||
print_delayacct((struct taskstats *) NLA_DATA(na));
|
||||
if (fd) {
|
||||
if (write(fd, NLA_DATA(na), na->nla_len) < 0) {
|
||||
err(1,"write error\n");
|
||||
}
|
||||
}
|
||||
if (!loop)
|
||||
goto done;
|
||||
break;
|
||||
default:
|
||||
printf("Unknown nested nla_type %d\n", na->nla_type);
|
||||
break;
|
||||
}
|
||||
len2 += NLA_ALIGN(na->nla_len);
|
||||
na = (struct nlattr *) ((char *) na + len2);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("Unknown nla_type %d\n", na->nla_type);
|
||||
break;
|
||||
}
|
||||
na = (struct nlattr *) (GENLMSG_DATA(&msg) + len);
|
||||
}
|
||||
} while (loop);
|
||||
done:
|
||||
if (maskset) {
|
||||
rc = send_cmd(nl_sd, id, mypid, TASKSTATS_CMD_GET,
|
||||
TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK,
|
||||
&cpumask, sizeof(cpumask));
|
||||
printf("Sent deregister mask, retval %d\n", rc);
|
||||
if (rc < 0)
|
||||
err(rc, "error sending deregister cpumask\n");
|
||||
}
|
||||
err:
|
||||
close(nl_sd);
|
||||
if (fd)
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,181 @@
|
|||
Per-task statistics interface
|
||||
-----------------------------
|
||||
|
||||
|
||||
Taskstats is a netlink-based interface for sending per-task and
|
||||
per-process statistics from the kernel to userspace.
|
||||
|
||||
Taskstats was designed for the following benefits:
|
||||
|
||||
- efficiently provide statistics during lifetime of a task and on its exit
|
||||
- unified interface for multiple accounting subsystems
|
||||
- extensibility for use by future accounting patches
|
||||
|
||||
Terminology
|
||||
-----------
|
||||
|
||||
"pid", "tid" and "task" are used interchangeably and refer to the standard
|
||||
Linux task defined by struct task_struct. per-pid stats are the same as
|
||||
per-task stats.
|
||||
|
||||
"tgid", "process" and "thread group" are used interchangeably and refer to the
|
||||
tasks that share an mm_struct i.e. the traditional Unix process. Despite the
|
||||
use of tgid, there is no special treatment for the task that is thread group
|
||||
leader - a process is deemed alive as long as it has any task belonging to it.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
To get statistics during a task's lifetime, userspace opens a unicast netlink
|
||||
socket (NETLINK_GENERIC family) and sends commands specifying a pid or a tgid.
|
||||
The response contains statistics for a task (if pid is specified) or the sum of
|
||||
statistics for all tasks of the process (if tgid is specified).
|
||||
|
||||
To obtain statistics for tasks which are exiting, the userspace listener
|
||||
sends a register command and specifies a cpumask. Whenever a task exits on
|
||||
one of the cpus in the cpumask, its per-pid statistics are sent to the
|
||||
registered listener. Using cpumasks allows the data received by one listener
|
||||
to be limited and assists in flow control over the netlink interface and is
|
||||
explained in more detail below.
|
||||
|
||||
If the exiting task is the last thread exiting its thread group,
|
||||
an additional record containing the per-tgid stats is also sent to userspace.
|
||||
The latter contains the sum of per-pid stats for all threads in the thread
|
||||
group, both past and present.
|
||||
|
||||
getdelays.c is a simple utility demonstrating usage of the taskstats interface
|
||||
for reporting delay accounting statistics. Users can register cpumasks,
|
||||
send commands and process responses, listen for per-tid/tgid exit data,
|
||||
write the data received to a file and do basic flow control by increasing
|
||||
receive buffer sizes.
|
||||
|
||||
Interface
|
||||
---------
|
||||
|
||||
The user-kernel interface is encapsulated in include/linux/taskstats.h
|
||||
|
||||
To avoid this documentation becoming obsolete as the interface evolves, only
|
||||
an outline of the current version is given. taskstats.h always overrides the
|
||||
description here.
|
||||
|
||||
struct taskstats is the common accounting structure for both per-pid and
|
||||
per-tgid data. It is versioned and can be extended by each accounting subsystem
|
||||
that is added to the kernel. The fields and their semantics are defined in the
|
||||
taskstats.h file.
|
||||
|
||||
The data exchanged between user and kernel space is a netlink message belonging
|
||||
to the NETLINK_GENERIC family and using the netlink attributes interface.
|
||||
The messages are in the format
|
||||
|
||||
+----------+- - -+-------------+-------------------+
|
||||
| nlmsghdr | Pad | genlmsghdr | taskstats payload |
|
||||
+----------+- - -+-------------+-------------------+
|
||||
|
||||
|
||||
The taskstats payload is one of the following three kinds:
|
||||
|
||||
1. Commands: Sent from user to kernel. Commands to get data on
|
||||
a pid/tgid consist of one attribute, of type TASKSTATS_CMD_ATTR_PID/TGID,
|
||||
containing a u32 pid or tgid in the attribute payload. The pid/tgid denotes
|
||||
the task/process for which userspace wants statistics.
|
||||
|
||||
Commands to register/deregister interest in exit data from a set of cpus
|
||||
consist of one attribute, of type
|
||||
TASKSTATS_CMD_ATTR_REGISTER/DEREGISTER_CPUMASK and contain a cpumask in the
|
||||
attribute payload. The cpumask is specified as an ascii string of
|
||||
comma-separated cpu ranges e.g. to listen to exit data from cpus 1,2,3,5,7,8
|
||||
the cpumask would be "1-3,5,7-8". If userspace forgets to deregister interest
|
||||
in cpus before closing the listening socket, the kernel cleans up its interest
|
||||
set over time. However, for the sake of efficiency, an explicit deregistration
|
||||
is advisable.
|
||||
|
||||
2. Response for a command: sent from the kernel in response to a userspace
|
||||
command. The payload is a series of three attributes of type:
|
||||
|
||||
a) TASKSTATS_TYPE_AGGR_PID/TGID : attribute containing no payload but indicates
|
||||
a pid/tgid will be followed by some stats.
|
||||
|
||||
b) TASKSTATS_TYPE_PID/TGID: attribute whose payload is the pid/tgid whose stats
|
||||
is being returned.
|
||||
|
||||
c) TASKSTATS_TYPE_STATS: attribute with a struct taskstsats as payload. The
|
||||
same structure is used for both per-pid and per-tgid stats.
|
||||
|
||||
3. New message sent by kernel whenever a task exits. The payload consists of a
|
||||
series of attributes of the following type:
|
||||
|
||||
a) TASKSTATS_TYPE_AGGR_PID: indicates next two attributes will be pid+stats
|
||||
b) TASKSTATS_TYPE_PID: contains exiting task's pid
|
||||
c) TASKSTATS_TYPE_STATS: contains the exiting task's per-pid stats
|
||||
d) TASKSTATS_TYPE_AGGR_TGID: indicates next two attributes will be tgid+stats
|
||||
e) TASKSTATS_TYPE_TGID: contains tgid of process to which task belongs
|
||||
f) TASKSTATS_TYPE_STATS: contains the per-tgid stats for exiting task's process
|
||||
|
||||
|
||||
per-tgid stats
|
||||
--------------
|
||||
|
||||
Taskstats provides per-process stats, in addition to per-task stats, since
|
||||
resource management is often done at a process granularity and aggregating task
|
||||
stats in userspace alone is inefficient and potentially inaccurate (due to lack
|
||||
of atomicity).
|
||||
|
||||
However, maintaining per-process, in addition to per-task stats, within the
|
||||
kernel has space and time overheads. To address this, the taskstats code
|
||||
accumalates each exiting task's statistics into a process-wide data structure.
|
||||
When the last task of a process exits, the process level data accumalated also
|
||||
gets sent to userspace (along with the per-task data).
|
||||
|
||||
When a user queries to get per-tgid data, the sum of all other live threads in
|
||||
the group is added up and added to the accumalated total for previously exited
|
||||
threads of the same thread group.
|
||||
|
||||
Extending taskstats
|
||||
-------------------
|
||||
|
||||
There are two ways to extend the taskstats interface to export more
|
||||
per-task/process stats as patches to collect them get added to the kernel
|
||||
in future:
|
||||
|
||||
1. Adding more fields to the end of the existing struct taskstats. Backward
|
||||
compatibility is ensured by the version number within the
|
||||
structure. Userspace will use only the fields of the struct that correspond
|
||||
to the version its using.
|
||||
|
||||
2. Defining separate statistic structs and using the netlink attributes
|
||||
interface to return them. Since userspace processes each netlink attribute
|
||||
independently, it can always ignore attributes whose type it does not
|
||||
understand (because it is using an older version of the interface).
|
||||
|
||||
|
||||
Choosing between 1. and 2. is a matter of trading off flexibility and
|
||||
overhead. If only a few fields need to be added, then 1. is the preferable
|
||||
path since the kernel and userspace don't need to incur the overhead of
|
||||
processing new netlink attributes. But if the new fields expand the existing
|
||||
struct too much, requiring disparate userspace accounting utilities to
|
||||
unnecessarily receive large structures whose fields are of no interest, then
|
||||
extending the attributes structure would be worthwhile.
|
||||
|
||||
Flow control for taskstats
|
||||
--------------------------
|
||||
|
||||
When the rate of task exits becomes large, a listener may not be able to keep
|
||||
up with the kernel's rate of sending per-tid/tgid exit data leading to data
|
||||
loss. This possibility gets compounded when the taskstats structure gets
|
||||
extended and the number of cpus grows large.
|
||||
|
||||
To avoid losing statistics, userspace should do one or more of the following:
|
||||
|
||||
- increase the receive buffer sizes for the netlink sockets opened by
|
||||
listeners to receive exit data.
|
||||
|
||||
- create more listeners and reduce the number of cpus being listened to by
|
||||
each listener. In the extreme case, there could be one listener for each cpu.
|
||||
Users may also consider setting the cpu affinity of the listener to the subset
|
||||
of cpus to which it listens, especially if they are listening to just one cpu.
|
||||
|
||||
Despite these measures, if the userspace receives ENOBUFS error messages
|
||||
indicated overflow of receive buffers, it should take measures to handle the
|
||||
loss of data.
|
||||
|
||||
----
|
|
@ -35,15 +35,14 @@ the vendor should tie the parity status bits to 0 if they do not intend
|
|||
to generate parity. Some vendors do not do this, and thus the parity bit
|
||||
can "float" giving false positives.
|
||||
|
||||
The PCI Parity EDAC device has the ability to "skip" known flaky
|
||||
cards during the parity scan. These are set by the parity "blacklist"
|
||||
interface in the sysfs for PCI Parity. (See the PCI section in the sysfs
|
||||
section below.) There is also a parity "whitelist" which is used as
|
||||
an explicit list of devices to scan, while the blacklist is a list
|
||||
of devices to skip.
|
||||
[There are patches in the kernel queue which will allow for storage of
|
||||
quirks of PCI devices reporting false parity positives. The 2.6.18
|
||||
kernel should have those patches included. When that becomes available,
|
||||
then EDAC will be patched to utilize that information to "skip" such
|
||||
devices.]
|
||||
|
||||
EDAC will have future error detectors that will be added or integrated
|
||||
into EDAC in the following list:
|
||||
EDAC will have future error detectors that will be integrated with
|
||||
EDAC or added to it, in the following list:
|
||||
|
||||
MCE Machine Check Exception
|
||||
MCA Machine Check Architecture
|
||||
|
@ -93,22 +92,24 @@ EDAC lives in the /sys/devices/system/edac directory. Within this directory
|
|||
there currently reside 2 'edac' components:
|
||||
|
||||
mc memory controller(s) system
|
||||
pci PCI status system
|
||||
pci PCI control and status system
|
||||
|
||||
|
||||
============================================================================
|
||||
Memory Controller (mc) Model
|
||||
|
||||
First a background on the memory controller's model abstracted in EDAC.
|
||||
Each mc device controls a set of DIMM memory modules. These modules are
|
||||
Each 'mc' device controls a set of DIMM memory modules. These modules are
|
||||
laid out in a Chip-Select Row (csrowX) and Channel table (chX). There can
|
||||
be multiple csrows and two channels.
|
||||
be multiple csrows and multiple channels.
|
||||
|
||||
Memory controllers allow for several csrows, with 8 csrows being a typical value.
|
||||
Yet, the actual number of csrows depends on the electrical "loading"
|
||||
of a given motherboard, memory controller and DIMM characteristics.
|
||||
|
||||
Dual channels allows for 128 bit data transfers to the CPU from memory.
|
||||
Some newer chipsets allow for more than 2 channels, like Fully Buffered DIMMs
|
||||
(FB-DIMMs). The following example will assume 2 channels:
|
||||
|
||||
|
||||
Channel 0 Channel 1
|
||||
|
@ -234,23 +235,15 @@ Polling period control file:
|
|||
The time period, in milliseconds, for polling for error information.
|
||||
Too small a value wastes resources. Too large a value might delay
|
||||
necessary handling of errors and might loose valuable information for
|
||||
locating the error. 1000 milliseconds (once each second) is about
|
||||
right for most uses.
|
||||
locating the error. 1000 milliseconds (once each second) is the current
|
||||
default. Systems which require all the bandwidth they can get, may
|
||||
increase this.
|
||||
|
||||
LOAD TIME: module/kernel parameter: poll_msec=[0|1]
|
||||
|
||||
RUN TIME: echo "1000" >/sys/devices/system/edac/mc/poll_msec
|
||||
|
||||
|
||||
Module Version read-only attribute file:
|
||||
|
||||
'mc_version'
|
||||
|
||||
The EDAC CORE module's version and compile date are shown here to
|
||||
indicate what EDAC is running.
|
||||
|
||||
|
||||
|
||||
============================================================================
|
||||
'mcX' DIRECTORIES
|
||||
|
||||
|
@ -284,35 +277,6 @@ Seconds since last counter reset control file:
|
|||
|
||||
|
||||
|
||||
DIMM capability attribute file:
|
||||
|
||||
'edac_capability'
|
||||
|
||||
The EDAC (Error Detection and Correction) capabilities/modes of
|
||||
the memory controller hardware.
|
||||
|
||||
|
||||
DIMM Current Capability attribute file:
|
||||
|
||||
'edac_current_capability'
|
||||
|
||||
The EDAC capabilities available with the hardware
|
||||
configuration. This may not be the same as "EDAC capability"
|
||||
if the correct memory is not used. If a memory controller is
|
||||
capable of EDAC, but DIMMs without check bits are in use, then
|
||||
Parity, SECDED, S4ECD4ED capabilities will not be available
|
||||
even though the memory controller might be capable of those
|
||||
modes with the proper memory loaded.
|
||||
|
||||
|
||||
Memory Type supported on this controller attribute file:
|
||||
|
||||
'supported_mem_type'
|
||||
|
||||
This attribute file displays the memory type, usually
|
||||
buffered and unbuffered DIMMs.
|
||||
|
||||
|
||||
Memory Controller name attribute file:
|
||||
|
||||
'mc_name'
|
||||
|
@ -321,16 +285,6 @@ Memory Controller name attribute file:
|
|||
that is being utilized.
|
||||
|
||||
|
||||
Memory Controller Module name attribute file:
|
||||
|
||||
'module_name'
|
||||
|
||||
This attribute file displays the memory controller module name,
|
||||
version and date built. The name of the memory controller
|
||||
hardware - some drivers work with multiple controllers and
|
||||
this field shows which hardware is present.
|
||||
|
||||
|
||||
Total memory managed by this memory controller attribute file:
|
||||
|
||||
'size_mb'
|
||||
|
@ -432,6 +386,9 @@ Memory Type attribute file:
|
|||
|
||||
This attribute file will display what type of memory is currently
|
||||
on this csrow. Normally, either buffered or unbuffered memory.
|
||||
Examples:
|
||||
Registered-DDR
|
||||
Unbuffered-DDR
|
||||
|
||||
|
||||
EDAC Mode of operation attribute file:
|
||||
|
@ -446,8 +403,13 @@ Device type attribute file:
|
|||
|
||||
'dev_type'
|
||||
|
||||
This attribute file will display what type of DIMM device is
|
||||
being utilized. Example: x4
|
||||
This attribute file will display what type of DRAM device is
|
||||
being utilized on this DIMM.
|
||||
Examples:
|
||||
x1
|
||||
x2
|
||||
x4
|
||||
x8
|
||||
|
||||
|
||||
Channel 0 CE Count attribute file:
|
||||
|
@ -522,10 +484,10 @@ SYSTEM LOGGING
|
|||
If logging for UEs and CEs are enabled then system logs will have
|
||||
error notices indicating errors that have been detected:
|
||||
|
||||
MC0: CE page 0x283, offset 0xce0, grain 8, syndrome 0x6ec3, row 0,
|
||||
EDAC MC0: CE page 0x283, offset 0xce0, grain 8, syndrome 0x6ec3, row 0,
|
||||
channel 1 "DIMM_B1": amd76x_edac
|
||||
|
||||
MC0: CE page 0x1e5, offset 0xfb0, grain 8, syndrome 0xb741, row 0,
|
||||
EDAC MC0: CE page 0x1e5, offset 0xfb0, grain 8, syndrome 0xb741, row 0,
|
||||
channel 1 "DIMM_B1": amd76x_edac
|
||||
|
||||
|
||||
|
@ -610,64 +572,4 @@ Parity Count:
|
|||
|
||||
|
||||
|
||||
PCI Device Whitelist:
|
||||
|
||||
'pci_parity_whitelist'
|
||||
|
||||
This control file allows for an explicit list of PCI devices to be
|
||||
scanned for parity errors. Only devices found on this list will
|
||||
be examined. The list is a line of hexadecimal VENDOR and DEVICE
|
||||
ID tuples:
|
||||
|
||||
1022:7450,1434:16a6
|
||||
|
||||
One or more can be inserted, separated by a comma.
|
||||
|
||||
To write the above list doing the following as one command line:
|
||||
|
||||
echo "1022:7450,1434:16a6"
|
||||
> /sys/devices/system/edac/pci/pci_parity_whitelist
|
||||
|
||||
|
||||
|
||||
To display what the whitelist is, simply 'cat' the same file.
|
||||
|
||||
|
||||
PCI Device Blacklist:
|
||||
|
||||
'pci_parity_blacklist'
|
||||
|
||||
This control file allows for a list of PCI devices to be
|
||||
skipped for scanning.
|
||||
The list is a line of hexadecimal VENDOR and DEVICE ID tuples:
|
||||
|
||||
1022:7450,1434:16a6
|
||||
|
||||
One or more can be inserted, separated by a comma.
|
||||
|
||||
To write the above list doing the following as one command line:
|
||||
|
||||
echo "1022:7450,1434:16a6"
|
||||
> /sys/devices/system/edac/pci/pci_parity_blacklist
|
||||
|
||||
|
||||
To display what the whitelist currently contains,
|
||||
simply 'cat' the same file.
|
||||
|
||||
=======================================================================
|
||||
|
||||
PCI Vendor and Devices IDs can be obtained with the lspci command. Using
|
||||
the -n option lspci will display the vendor and device IDs. The system
|
||||
administrator will have to determine which devices should be scanned or
|
||||
skipped.
|
||||
|
||||
|
||||
|
||||
The two lists (white and black) are prioritized. blacklist is the lower
|
||||
priority and will NOT be utilized when a whitelist has been set.
|
||||
Turn OFF a whitelist by an empty echo command:
|
||||
|
||||
echo > /sys/devices/system/edac/pci/pci_parity_whitelist
|
||||
|
||||
and any previous blacklist will be utilized.
|
||||
|
||||
|
|
|
@ -55,14 +55,6 @@ Who: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
|
|||
|
||||
---------------------------
|
||||
|
||||
What: remove EXPORT_SYMBOL(insert_resource)
|
||||
When: April 2006
|
||||
Files: kernel/resource.c
|
||||
Why: No modular usage in the kernel.
|
||||
Who: Adrian Bunk <bunk@stusta.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
|
||||
When: November 2005
|
||||
Files: drivers/pcmcia/: pcmcia_ioctl.c
|
||||
|
@ -166,17 +158,6 @@ Who: Arjan van de Ven <arjan@linux.intel.com>
|
|||
|
||||
---------------------------
|
||||
|
||||
What: remove EXPORT_SYMBOL(tasklist_lock)
|
||||
When: August 2006
|
||||
Files: kernel/fork.c
|
||||
Why: tasklist_lock protects the kernel internal task list. Modules have
|
||||
no business looking at it, and all instances in drivers have been due
|
||||
to use of too-lowlevel APIs. Having this symbol exported prevents
|
||||
moving to more scalable locking schemes for the task list.
|
||||
Who: Christoph Hellwig <hch@lst.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: mount/umount uevents
|
||||
When: February 2007
|
||||
Why: These events are not correct, and do not properly let userspace know
|
||||
|
@ -266,3 +247,14 @@ Why: The interrupt related SA_* flags are replaced by IRQF_* to move them
|
|||
Who: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: i2c-ite and i2c-algo-ite drivers
|
||||
When: September 2006
|
||||
Why: These drivers never compiled since they were added to the kernel
|
||||
tree 5 years ago. This feature removal can be reevaluated if
|
||||
someone shows interest in the drivers, fixes them and takes over
|
||||
maintenance.
|
||||
http://marc.theaimsgroup.com/?l=linux-mips&m=115040510817448
|
||||
Who: Jean Delvare <khali@linux-fr.org>
|
||||
|
||||
---------------------------
|
||||
|
|
|
@ -142,8 +142,8 @@ see also dquot_operations section.
|
|||
|
||||
--------------------------- file_system_type ---------------------------
|
||||
prototypes:
|
||||
struct int (*get_sb) (struct file_system_type *, int,
|
||||
const char *, void *, struct vfsmount *);
|
||||
int (*get_sb) (struct file_system_type *, int,
|
||||
const char *, void *, struct vfsmount *);
|
||||
void (*kill_sb) (struct super_block *);
|
||||
locking rules:
|
||||
may block BKL
|
||||
|
|
|
@ -113,8 +113,8 @@ members are defined:
|
|||
struct file_system_type {
|
||||
const char *name;
|
||||
int fs_flags;
|
||||
struct int (*get_sb) (struct file_system_type *, int,
|
||||
const char *, void *, struct vfsmount *);
|
||||
int (*get_sb) (struct file_system_type *, int,
|
||||
const char *, void *, struct vfsmount *);
|
||||
void (*kill_sb) (struct super_block *);
|
||||
struct module *owner;
|
||||
struct file_system_type * next;
|
||||
|
|
|
@ -2,13 +2,36 @@ Kernel driver abituguru
|
|||
=======================
|
||||
|
||||
Supported chips:
|
||||
* Abit uGuru (Hardware Monitor part only)
|
||||
* Abit uGuru revision 1-3 (Hardware Monitor part only)
|
||||
Prefix: 'abituguru'
|
||||
Addresses scanned: ISA 0x0E0
|
||||
Datasheet: Not available, this driver is based on reverse engineering.
|
||||
A "Datasheet" has been written based on the reverse engineering it
|
||||
should be available in the same dir as this file under the name
|
||||
abituguru-datasheet.
|
||||
Note:
|
||||
The uGuru is a microcontroller with onboard firmware which programs
|
||||
it to behave as a hwmon IC. There are many different revisions of the
|
||||
firmware and thus effectivly many different revisions of the uGuru.
|
||||
Below is an incomplete list with which revisions are used for which
|
||||
Motherboards:
|
||||
uGuru 1.00 ~ 1.24 (AI7, KV8-MAX3, AN7) (1)
|
||||
uGuru 2.0.0.0 ~ 2.0.4.2 (KV8-PRO)
|
||||
uGuru 2.1.0.0 ~ 2.1.2.8 (AS8, AV8, AA8, AG8, AA8XE, AX8)
|
||||
uGuru 2.2.0.0 ~ 2.2.0.6 (AA8 Fatal1ty)
|
||||
uGuru 2.3.0.0 ~ 2.3.0.9 (AN8)
|
||||
uGuru 3.0.0.0 ~ 3.0.1.2 (AW8, AL8, NI8)
|
||||
uGuru 4.xxxxx? (AT8 32X) (2)
|
||||
1) For revisions 2 and 3 uGuru's the driver can autodetect the
|
||||
sensortype (Volt or Temp) for bank1 sensors, for revision 1 uGuru's
|
||||
this doesnot always work. For these uGuru's the autodection can
|
||||
be overriden with the bank1_types module param. For all 3 known
|
||||
revison 1 motherboards the correct use of this param is:
|
||||
bank1_types=1,1,0,0,0,0,0,2,0,0,0,0,2,0,0,1
|
||||
You may also need to specify the fan_sensors option for these boards
|
||||
fan_sensors=5
|
||||
2) The current version of the abituguru driver is known to NOT work
|
||||
on these Motherboards
|
||||
|
||||
Authors:
|
||||
Hans de Goede <j.w.r.degoede@hhs.nl>,
|
||||
|
@ -22,6 +45,11 @@ Module Parameters
|
|||
* force: bool Force detection. Note this parameter only causes the
|
||||
detection to be skipped, if the uGuru can't be read
|
||||
the module initialization (insmod) will still fail.
|
||||
* bank1_types: int[] Bank1 sensortype autodetection override:
|
||||
-1 autodetect (default)
|
||||
0 volt sensor
|
||||
1 temp sensor
|
||||
2 not connected
|
||||
* fan_sensors: int Tell the driver how many fan speed sensors there are
|
||||
on your motherboard. Default: 0 (autodetect).
|
||||
* pwms: int Tell the driver how many fan speed controls (fan
|
||||
|
@ -29,7 +57,7 @@ Module Parameters
|
|||
* verbose: int How verbose should the driver be? (0-3):
|
||||
0 normal output
|
||||
1 + verbose error reporting
|
||||
2 + sensors type probing info\n"
|
||||
2 + sensors type probing info (default)
|
||||
3 + retryable error reporting
|
||||
Default: 2 (the driver is still in the testing phase)
|
||||
|
||||
|
|
|
@ -42,8 +42,8 @@ I suspect that this driver could be made to work for the following SiS
|
|||
chipsets as well: 635, and 635T. If anyone owns a board with those chips
|
||||
AND is willing to risk crashing & burning an otherwise well-behaved kernel
|
||||
in the name of progress... please contact me at <mhoffman@lightlink.com> or
|
||||
via the project's mailing list: <lm-sensors@lm-sensors.org>. Please
|
||||
send bug reports and/or success stories as well.
|
||||
via the project's mailing list: <i2c@lm-sensors.org>. Please send bug
|
||||
reports and/or success stories as well.
|
||||
|
||||
|
||||
TO DOs
|
||||
|
|
|
@ -448,6 +448,8 @@ running once the system is up.
|
|||
Format: <area>[,<node>]
|
||||
See also Documentation/networking/decnet.txt.
|
||||
|
||||
delayacct [KNL] Enable per-task delay accounting
|
||||
|
||||
dhash_entries= [KNL]
|
||||
Set number of hash buckets for dentry cache.
|
||||
|
||||
|
|
|
@ -1015,10 +1015,9 @@ CPU from reordering them.
|
|||
There are some more advanced barrier functions:
|
||||
|
||||
(*) set_mb(var, value)
|
||||
(*) set_wmb(var, value)
|
||||
|
||||
These assign the value to the variable and then insert at least a write
|
||||
barrier after it, depending on the function. They aren't guaranteed to
|
||||
This assigns the value to the variable and then inserts at least a write
|
||||
barrier after it, depending on the function. It isn't guaranteed to
|
||||
insert anything more than a compiler barrier in a UP compilation.
|
||||
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ the following functions or values:
|
|||
1. (optional) set up RTC routines
|
||||
2. (optional) calibrate and set the mips_counter_frequency
|
||||
|
||||
b) board_timer_setup - a function pointer. Invoked at the end of time_init()
|
||||
b) plat_timer_setup - a function pointer. Invoked at the end of time_init()
|
||||
1. (optional) over-ride any decisions made in time_init()
|
||||
2. set up the irqaction for timer interrupt.
|
||||
3. enable the timer interrupt
|
||||
|
@ -116,19 +116,17 @@ Step 2: the machine setup() function
|
|||
|
||||
If you supply board_time_init(), set the function poointer.
|
||||
|
||||
Set the function pointer board_timer_setup() (mandatory)
|
||||
|
||||
|
||||
Step 3: implement rtc routines, board_time_init() and board_timer_setup()
|
||||
Step 3: implement rtc routines, board_time_init() and plat_timer_setup()
|
||||
if needed.
|
||||
|
||||
board_time_init() -
|
||||
board_time_init() -
|
||||
a) (optional) set up RTC routines,
|
||||
b) (optional) calibrate and set the mips_counter_frequency
|
||||
(only needed if you intended to use fixed_rate_gettimeoffset
|
||||
or use cpu counter as timer interrupt source)
|
||||
|
||||
board_timer_setup() -
|
||||
plat_timer_setup() -
|
||||
a) (optional) over-write any choices made above by time_init().
|
||||
b) machine specific code should setup the timer irqaction.
|
||||
c) enable the timer interrupt
|
||||
|
|
|
@ -4,15 +4,16 @@ Mounting the root filesystem via NFS (nfsroot)
|
|||
Written 1996 by Gero Kuhlmann <gero@gkminix.han.de>
|
||||
Updated 1997 by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
|
||||
Updated 2006 by Nico Schottelius <nico-kernel-nfsroot@schottelius.org>
|
||||
Updated 2006 by Horms <horms@verge.net.au>
|
||||
|
||||
|
||||
|
||||
If you want to use a diskless system, as an X-terminal or printer
|
||||
server for example, you have to put your root filesystem onto a
|
||||
non-disk device. This can either be a ramdisk (see initrd.txt in
|
||||
this directory for further information) or a filesystem mounted
|
||||
via NFS. The following text describes on how to use NFS for the
|
||||
root filesystem. For the rest of this text 'client' means the
|
||||
In order to use a diskless system, such as an X-terminal or printer server
|
||||
for example, it is necessary for the root filesystem to be present on a
|
||||
non-disk device. This may be an initramfs (see Documentation/filesystems/
|
||||
ramfs-rootfs-initramfs.txt), a ramdisk (see Documenation/initrd.txt) or a
|
||||
filesystem mounted via NFS. The following text describes on how to use NFS
|
||||
for the root filesystem. For the rest of this text 'client' means the
|
||||
diskless system, and 'server' means the NFS server.
|
||||
|
||||
|
||||
|
@ -21,11 +22,13 @@ diskless system, and 'server' means the NFS server.
|
|||
1.) Enabling nfsroot capabilities
|
||||
-----------------------------
|
||||
|
||||
In order to use nfsroot you have to select support for NFS during
|
||||
kernel configuration. Note that NFS cannot be loaded as a module
|
||||
in this case. The configuration script will then ask you whether
|
||||
you want to use nfsroot, and if yes what kind of auto configuration
|
||||
system you want to use. Selecting both BOOTP and RARP is safe.
|
||||
In order to use nfsroot, NFS client support needs to be selected as
|
||||
built-in during configuration. Once this has been selected, the nfsroot
|
||||
option will become available, which should also be selected.
|
||||
|
||||
In the networking options, kernel level autoconfiguration can be selected,
|
||||
along with the types of autoconfiguration to support. Selecting all of
|
||||
DHCP, BOOTP and RARP is safe.
|
||||
|
||||
|
||||
|
||||
|
@ -33,11 +36,10 @@ system you want to use. Selecting both BOOTP and RARP is safe.
|
|||
2.) Kernel command line
|
||||
-------------------
|
||||
|
||||
When the kernel has been loaded by a boot loader (either by loadlin,
|
||||
LILO or a network boot program) it has to be told what root fs device
|
||||
to use, and where to find the server and the name of the directory
|
||||
on the server to mount as root. This can be established by a couple
|
||||
of kernel command line parameters:
|
||||
When the kernel has been loaded by a boot loader (see below) it needs to be
|
||||
told what root fs device to use. And in the case of nfsroot, where to find
|
||||
both the server and the name of the directory on the server to mount as root.
|
||||
This can be established using the following kernel command line parameters:
|
||||
|
||||
|
||||
root=/dev/nfs
|
||||
|
@ -49,23 +51,21 @@ root=/dev/nfs
|
|||
|
||||
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
|
||||
|
||||
If the `nfsroot' parameter is NOT given on the command line, the default
|
||||
"/tftpboot/%s" will be used.
|
||||
If the `nfsroot' parameter is NOT given on the command line,
|
||||
the default "/tftpboot/%s" will be used.
|
||||
|
||||
<server-ip> Specifies the IP address of the NFS server. If this field
|
||||
is not given, the default address as determined by the
|
||||
`ip' variable (see below) is used. One use of this
|
||||
parameter is for example to allow using different servers
|
||||
for RARP and NFS. Usually you can leave this blank.
|
||||
<server-ip> Specifies the IP address of the NFS server.
|
||||
The default address is determined by the `ip' parameter
|
||||
(see below). This parameter allows the use of different
|
||||
servers for IP autoconfiguration and NFS.
|
||||
|
||||
<root-dir> Name of the directory on the server to mount as root. If
|
||||
there is a "%s" token in the string, the token will be
|
||||
replaced by the ASCII-representation of the client's IP
|
||||
address.
|
||||
<root-dir> Name of the directory on the server to mount as root.
|
||||
If there is a "%s" token in the string, it will be
|
||||
replaced by the ASCII-representation of the client's
|
||||
IP address.
|
||||
|
||||
<nfs-options> Standard NFS options. All options are separated by commas.
|
||||
If the options field is not given, the following defaults
|
||||
will be used:
|
||||
The following defaults are used:
|
||||
port = as given by server portmap daemon
|
||||
rsize = 1024
|
||||
wsize = 1024
|
||||
|
@ -81,129 +81,174 @@ nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
|
|||
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
|
||||
|
||||
This parameter tells the kernel how to configure IP addresses of devices
|
||||
and also how to set up the IP routing table. It was originally called `nfsaddrs',
|
||||
but now the boot-time IP configuration works independently of NFS, so it
|
||||
was renamed to `ip' and the old name remained as an alias for compatibility
|
||||
reasons.
|
||||
and also how to set up the IP routing table. It was originally called
|
||||
`nfsaddrs', but now the boot-time IP configuration works independently of
|
||||
NFS, so it was renamed to `ip' and the old name remained as an alias for
|
||||
compatibility reasons.
|
||||
|
||||
If this parameter is missing from the kernel command line, all fields are
|
||||
assumed to be empty, and the defaults mentioned below apply. In general
|
||||
this means that the kernel tries to configure everything using both
|
||||
RARP and BOOTP (depending on what has been enabled during kernel confi-
|
||||
guration, and if both what protocol answer got in first).
|
||||
|
||||
<client-ip> IP address of the client. If empty, the address will either
|
||||
be determined by RARP or BOOTP. What protocol is used de-
|
||||
pends on what has been enabled during kernel configuration
|
||||
and on the <autoconf> parameter. If this parameter is not
|
||||
empty, neither RARP nor BOOTP will be used.
|
||||
|
||||
<server-ip> IP address of the NFS server. If RARP is used to determine
|
||||
the client address and this parameter is NOT empty only
|
||||
replies from the specified server are accepted. To use
|
||||
different RARP and NFS server, specify your RARP server
|
||||
here (or leave it blank), and specify your NFS server in
|
||||
the `nfsroot' parameter (see above). If this entry is blank
|
||||
the address of the server is used which answered the RARP
|
||||
or BOOTP request.
|
||||
|
||||
<gw-ip> IP address of a gateway if the server is on a different
|
||||
subnet. If this entry is empty no gateway is used and the
|
||||
server is assumed to be on the local network, unless a
|
||||
value has been received by BOOTP.
|
||||
|
||||
<netmask> Netmask for local network interface. If this is empty,
|
||||
the netmask is derived from the client IP address assuming
|
||||
classful addressing, unless overridden in BOOTP reply.
|
||||
|
||||
<hostname> Name of the client. If empty, the client IP address is
|
||||
used in ASCII notation, or the value received by BOOTP.
|
||||
|
||||
<device> Name of network device to use. If this is empty, all
|
||||
devices are used for RARP and BOOTP requests, and the
|
||||
first one we receive a reply on is configured. If you have
|
||||
only one device, you can safely leave this blank.
|
||||
|
||||
<autoconf> Method to use for autoconfiguration. If this is either
|
||||
'rarp' or 'bootp', the specified protocol is used.
|
||||
If the value is 'both' or empty, both protocols are used
|
||||
so far as they have been enabled during kernel configura-
|
||||
tion. 'off' means no autoconfiguration.
|
||||
this means that the kernel tries to configure everything using
|
||||
autoconfiguration.
|
||||
|
||||
The <autoconf> parameter can appear alone as the value to the `ip'
|
||||
parameter (without all the ':' characters before) in which case auto-
|
||||
configuration is used.
|
||||
|
||||
<client-ip> IP address of the client.
|
||||
|
||||
Default: Determined using autoconfiguration.
|
||||
|
||||
<server-ip> IP address of the NFS server. If RARP is used to determine
|
||||
the client address and this parameter is NOT empty only
|
||||
replies from the specified server are accepted.
|
||||
|
||||
Only required for for NFS root. That is autoconfiguration
|
||||
will not be triggered if it is missing and NFS root is not
|
||||
in operation.
|
||||
|
||||
Default: Determined using autoconfiguration.
|
||||
The address of the autoconfiguration server is used.
|
||||
|
||||
<gw-ip> IP address of a gateway if the server is on a different subnet.
|
||||
|
||||
Default: Determined using autoconfiguration.
|
||||
|
||||
<netmask> Netmask for local network interface. If unspecified
|
||||
the netmask is derived from the client IP address assuming
|
||||
classful addressing.
|
||||
|
||||
Default: Determined using autoconfiguration.
|
||||
|
||||
<hostname> Name of the client. May be supplied by autoconfiguration,
|
||||
but its absence will not trigger autoconfiguration.
|
||||
|
||||
Default: Client IP address is used in ASCII notation.
|
||||
|
||||
<device> Name of network device to use.
|
||||
|
||||
Default: If the host only has one device, it is used.
|
||||
Otherwise the device is determined using
|
||||
autoconfiguration. This is done by sending
|
||||
autoconfiguration requests out of all devices,
|
||||
and using the device that received the first reply.
|
||||
|
||||
<autoconf> Method to use for autoconfiguration. In the case of options
|
||||
which specify multiple autoconfiguration protocols,
|
||||
requests are sent using all protocols, and the first one
|
||||
to reply is used.
|
||||
|
||||
Only autoconfiguration protocols that have been compiled
|
||||
into the kernel will be used, regardless of the value of
|
||||
this option.
|
||||
|
||||
off or none: don't use autoconfiguration (default)
|
||||
on or any: use any protocol available in the kernel
|
||||
dhcp: use DHCP
|
||||
bootp: use BOOTP
|
||||
rarp: use RARP
|
||||
both: use both BOOTP and RARP but not DHCP
|
||||
(old option kept for backwards compatibility)
|
||||
|
||||
Default: any
|
||||
|
||||
|
||||
|
||||
3.) Kernel loader
|
||||
-------------
|
||||
|
||||
To get the kernel into memory different approaches can be used. They
|
||||
depend on what facilities are available:
|
||||
3.) Boot Loader
|
||||
----------
|
||||
|
||||
To get the kernel into memory different approaches can be used.
|
||||
They depend on various facilities being available:
|
||||
|
||||
|
||||
3.1) Writing the kernel onto a floppy using dd:
|
||||
As always you can just write the kernel onto a floppy using dd,
|
||||
but then it's not possible to use kernel command lines at all.
|
||||
To substitute the 'root=' parameter, create a dummy device on any
|
||||
linux system with major number 0 and minor number 255 using mknod:
|
||||
3.1) Booting from a floppy using syslinux
|
||||
|
||||
mknod /dev/boot255 c 0 255
|
||||
When building kernels, an easy way to create a boot floppy that uses
|
||||
syslinux is to use the zdisk or bzdisk make targets which use
|
||||
and bzimage images respectively. Both targets accept the
|
||||
FDARGS parameter which can be used to set the kernel command line.
|
||||
|
||||
Then copy the kernel zImage file onto a floppy using dd:
|
||||
e.g.
|
||||
make bzdisk FDARGS="root=/dev/nfs"
|
||||
|
||||
dd if=/usr/src/linux/arch/i386/boot/zImage of=/dev/fd0
|
||||
Note that the user running this command will need to have
|
||||
access to the floppy drive device, /dev/fd0
|
||||
|
||||
And finally use rdev to set the root device:
|
||||
For more information on syslinux, including how to create bootdisks
|
||||
for prebuilt kernels, see http://syslinux.zytor.com/
|
||||
|
||||
rdev /dev/fd0 /dev/boot255
|
||||
N.B: Previously it was possible to write a kernel directly to
|
||||
a floppy using dd, configure the boot device using rdev, and
|
||||
boot using the resulting floppy. Linux no longer supports this
|
||||
method of booting.
|
||||
|
||||
You can then remove the dummy device /dev/boot255 again. There
|
||||
is no real device available for it.
|
||||
The other two kernel command line parameters cannot be substi-
|
||||
tuted with rdev. Therefore, using this method the kernel will
|
||||
by default use RARP and/or BOOTP, and if it gets an answer via
|
||||
RARP will mount the directory /tftpboot/<client-ip>/ as its
|
||||
root. If it got a BOOTP answer the directory name in that answer
|
||||
is used.
|
||||
3.2) Booting from a cdrom using isolinux
|
||||
|
||||
When building kernels, an easy way to create a bootable cdrom that
|
||||
uses isolinux is to use the isoimage target which uses a bzimage
|
||||
image. Like zdisk and bzdisk, this target accepts the FDARGS
|
||||
parameter which can be used to set the kernel command line.
|
||||
|
||||
e.g.
|
||||
make isoimage FDARGS="root=/dev/nfs"
|
||||
|
||||
The resulting iso image will be arch/<ARCH>/boot/image.iso
|
||||
This can be written to a cdrom using a variety of tools including
|
||||
cdrecord.
|
||||
|
||||
e.g.
|
||||
cdrecord dev=ATAPI:1,0,0 arch/i386/boot/image.iso
|
||||
|
||||
For more information on isolinux, including how to create bootdisks
|
||||
for prebuilt kernels, see http://syslinux.zytor.com/
|
||||
|
||||
3.2) Using LILO
|
||||
When using LILO you can specify all necessary command line
|
||||
parameters with the 'append=' command in the LILO configuration
|
||||
file. However, to use the 'root=' command you also need to
|
||||
set up a dummy device as described in 3.1 above. For how to use
|
||||
LILO and its 'append=' command please refer to the LILO
|
||||
documentation.
|
||||
When using LILO all the necessary command line parameters may be
|
||||
specified using the 'append=' directive in the LILO configuration
|
||||
file.
|
||||
|
||||
However, to use the 'root=' directive you also need to create
|
||||
a dummy root device, which may be removed after LILO is run.
|
||||
|
||||
mknod /dev/boot255 c 0 255
|
||||
|
||||
For information on configuring LILO, please refer to its documentation.
|
||||
|
||||
3.3) Using GRUB
|
||||
When you use GRUB, you simply append the parameters after the kernel
|
||||
specification: "kernel <kernel> <parameters>" (without the quotes).
|
||||
When using GRUB, kernel parameter are simply appended after the kernel
|
||||
specification: kernel <kernel> <parameters>
|
||||
|
||||
3.4) Using loadlin
|
||||
When you want to boot Linux from a DOS command prompt without
|
||||
having a local hard disk to mount as root, you can use loadlin.
|
||||
I was told that it works, but haven't used it myself yet. In
|
||||
general you should be able to create a kernel command line simi-
|
||||
lar to how LILO is doing it. Please refer to the loadlin docu-
|
||||
mentation for further information.
|
||||
loadlin may be used to boot Linux from a DOS command prompt without
|
||||
requiring a local hard disk to mount as root. This has not been
|
||||
thoroughly tested by the authors of this document, but in general
|
||||
it should be possible configure the kernel command line similarly
|
||||
to the configuration of LILO.
|
||||
|
||||
Please refer to the loadlin documentation for further information.
|
||||
|
||||
3.5) Using a boot ROM
|
||||
This is probably the most elegant way of booting a diskless
|
||||
client. With a boot ROM the kernel gets loaded using the TFTP
|
||||
protocol. As far as I know, no commercial boot ROMs yet
|
||||
support booting Linux over the network, but there are two
|
||||
free implementations of a boot ROM available on sunsite.unc.edu
|
||||
and its mirrors. They are called 'netboot-nfs' and 'etherboot'.
|
||||
Both contain everything you need to boot a diskless Linux client.
|
||||
This is probably the most elegant way of booting a diskless client.
|
||||
With a boot ROM the kernel is loaded using the TFTP protocol. The
|
||||
authors of this document are not aware of any no commercial boot
|
||||
ROMs that support booting Linux over the network. However, there
|
||||
are two free implementations of a boot ROM, netboot-nfs and
|
||||
etherboot, both of which are available on sunsite.unc.edu, and both
|
||||
of which contain everything you need to boot a diskless Linux client.
|
||||
|
||||
3.6) Using pxelinux
|
||||
Using pxelinux you specify the kernel you built with
|
||||
Pxelinux may be used to boot linux using the PXE boot loader
|
||||
which is present on many modern network cards.
|
||||
|
||||
When using pxelinux, the kernel image is specified using
|
||||
"kernel <relative-path-below /tftpboot>". The nfsroot parameters
|
||||
are passed to the kernel by adding them to the "append" line.
|
||||
You may perhaps also want to fine tune the console output,
|
||||
see Documentation/serial-console.txt for serial console help.
|
||||
It is common to use serial console in conjunction with pxeliunx,
|
||||
see Documentation/serial-console.txt for more information.
|
||||
|
||||
For more information on isolinux, including how to create bootdisks
|
||||
for prebuilt kernels, see http://syslinux.zytor.com/
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ Contents:
|
|||
1) Overview
|
||||
2) Kernel Command Line Parameters
|
||||
3) Using "rdev -r"
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
|
||||
|
||||
1) Overview
|
||||
|
@ -34,7 +34,7 @@ make it clearer. The original "ramdisk=<ram_size>" has been kept around for
|
|||
compatibility reasons, but it may be removed in the future.
|
||||
|
||||
The new RAM disk also has the ability to load compressed RAM disk images,
|
||||
allowing one to squeeze more programs onto an average installation or
|
||||
allowing one to squeeze more programs onto an average installation or
|
||||
rescue floppy disk.
|
||||
|
||||
|
||||
|
@ -51,7 +51,7 @@ default is 4096 (4 MB) (8192 (8 MB) on S390).
|
|||
===================
|
||||
|
||||
This parameter tells the RAM disk driver how many bytes to use per block. The
|
||||
default is 512.
|
||||
default is 1024 (BLOCK_SIZE).
|
||||
|
||||
|
||||
3) Using "rdev -r"
|
||||
|
@ -70,7 +70,7 @@ These numbers are no magical secrets, as seen below:
|
|||
./arch/i386/kernel/setup.c:#define RAMDISK_PROMPT_FLAG 0x8000
|
||||
./arch/i386/kernel/setup.c:#define RAMDISK_LOAD_FLAG 0x4000
|
||||
|
||||
Consider a typical two floppy disk setup, where you will have the
|
||||
Consider a typical two floppy disk setup, where you will have the
|
||||
kernel on disk one, and have already put a RAM disk image onto disk #2.
|
||||
|
||||
Hence you want to set bits 0 to 13 as 0, meaning that your RAM disk
|
||||
|
@ -97,12 +97,12 @@ Since the default start = 0 and the default prompt = 1, you could use:
|
|||
append = "load_ramdisk=1"
|
||||
|
||||
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
----------------------------------------------
|
||||
|
||||
To create a RAM disk image, you will need a spare block device to
|
||||
construct it on. This can be the RAM disk device itself, or an
|
||||
unused disk partition (such as an unmounted swap partition). For this
|
||||
unused disk partition (such as an unmounted swap partition). For this
|
||||
example, we will use the RAM disk device, "/dev/ram0".
|
||||
|
||||
Note: This technique should not be done on a machine with less than 8 MB
|
||||
|
|
|
@ -1172,7 +1172,7 @@
|
|||
}
|
||||
|
||||
/* PCI IDs */
|
||||
static struct pci_device_id snd_mychip_ids[] __devinitdata = {
|
||||
static struct pci_device_id snd_mychip_ids[] = {
|
||||
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
||||
....
|
||||
|
@ -1565,7 +1565,7 @@
|
|||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static struct pci_device_id snd_mychip_ids[] __devinitdata = {
|
||||
static struct pci_device_id snd_mychip_ids[] = {
|
||||
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
||||
....
|
||||
|
|
|
@ -399,10 +399,10 @@ REINER SCT cyberJack pinpad/e-com USB chipcard reader
|
|||
|
||||
Prolific PL2303 Driver
|
||||
|
||||
This driver support any device that has the PL2303 chip from Prolific
|
||||
This driver supports any device that has the PL2303 chip from Prolific
|
||||
in it. This includes a number of single port USB to serial
|
||||
converters and USB GPS devices. Devices from Aten (the UC-232) and
|
||||
IO-Data work with this driver.
|
||||
IO-Data work with this driver, as does the DCU-11 mobile-phone cable.
|
||||
|
||||
For any questions or problems with this driver, please contact Greg
|
||||
Kroah-Hartman at greg@kroah.com
|
||||
|
|
49
MAINTAINERS
49
MAINTAINERS
|
@ -274,7 +274,7 @@ S: Maintained
|
|||
ALI1563 I2C DRIVER
|
||||
P: Rudolf Marek
|
||||
M: r.marek@sh.cvut.cz
|
||||
L: lm-sensors@lm-sensors.org
|
||||
L: i2c@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
ALPHA PORT
|
||||
|
@ -601,6 +601,15 @@ W: http://linuxtv.org
|
|||
T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
|
||||
S: Maintained
|
||||
|
||||
CALGARY x86-64 IOMMU
|
||||
P: Muli Ben-Yehuda
|
||||
M: muli@il.ibm.com
|
||||
P: Jon D. Mason
|
||||
M: jdmason@us.ibm.com
|
||||
L: linux-kernel@vger.kernel.org
|
||||
L: discuss@x86-64.org
|
||||
S: Maintained
|
||||
|
||||
COMMON INTERNET FILE SYSTEM (CIFS)
|
||||
P: Steve French
|
||||
M: sfrench@samba.org
|
||||
|
@ -762,6 +771,7 @@ M: aliakc@web.de
|
|||
P: Jamie Lenehan
|
||||
M: lenehan@twibble.org
|
||||
W: http://twibble.org/dist/dc395x/
|
||||
L: dc395x@twibble.org
|
||||
L: http://lists.twibble.org/mailman/listinfo/dc395x/
|
||||
S: Maintained
|
||||
|
||||
|
@ -1258,7 +1268,7 @@ S: Maintained
|
|||
I2C SUBSYSTEM
|
||||
P: Jean Delvare
|
||||
M: khali@linux-fr.org
|
||||
L: lm-sensors@lm-sensors.org
|
||||
L: i2c@lm-sensors.org
|
||||
W: http://www.lm-sensors.nu/
|
||||
T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
|
||||
S: Maintained
|
||||
|
@ -1510,6 +1520,7 @@ P: Yi Zhu
|
|||
M: yi.zhu@intel.com
|
||||
P: James Ketrenos
|
||||
M: jketreno@linux.intel.com
|
||||
L: ipw2100-devel@lists.sourceforge.net
|
||||
L: http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
|
||||
W: http://ipw2100.sourceforge.net
|
||||
S: Supported
|
||||
|
@ -1519,6 +1530,7 @@ P: Yi Zhu
|
|||
M: yi.zhu@intel.com
|
||||
P: James Ketrenos
|
||||
M: jketreno@linux.intel.com
|
||||
L: ipw2100-devel@lists.sourceforge.net
|
||||
L: http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
|
||||
W: http://ipw2200.sourceforge.net
|
||||
S: Supported
|
||||
|
@ -2102,7 +2114,7 @@ S: Maintained
|
|||
OPENCORES I2C BUS DRIVER
|
||||
P: Peter Korsgaard
|
||||
M: jacmet@sunsite.dk
|
||||
L: lm-sensors@lm-sensors.org
|
||||
L: i2c@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
|
||||
|
@ -2235,6 +2247,7 @@ S: Maintained
|
|||
|
||||
PCMCIA SUBSYSTEM
|
||||
P: Linux PCMCIA Team
|
||||
L: linux-pcmcia@lists.infradead.org
|
||||
L: http://lists.infradead.org/mailman/listinfo/linux-pcmcia
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
|
||||
S: Maintained
|
||||
|
@ -2245,6 +2258,12 @@ M: tsbogend@alpha.franken.de
|
|||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
PER-TASK DELAY ACCOUNTING
|
||||
P: Shailabh Nagar
|
||||
M: nagar@watson.ibm.com
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
PERSONALITY HANDLING
|
||||
P: Christoph Hellwig
|
||||
M: hch@infradead.org
|
||||
|
@ -2684,6 +2703,11 @@ M: shemminger@osdl.org
|
|||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
SOEKRIS NET48XX LED SUPPORT
|
||||
P: Chris Boot
|
||||
M: bootc@bootc.net
|
||||
S: Maintained
|
||||
|
||||
SPARC (sparc32):
|
||||
P: William L. Irwin
|
||||
M: wli@holomorphy.com
|
||||
|
@ -2756,11 +2780,23 @@ P: Christoph Hellwig
|
|||
M: hch@infradead.org
|
||||
S: Maintained
|
||||
|
||||
TC CLASSIFIER
|
||||
P: Jamal Hadi Salim
|
||||
M: hadi@cyberus.ca
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
TI OMAP RANDOM NUMBER GENERATOR SUPPORT
|
||||
P: Deepak Saxena
|
||||
M: dsaxena@plexity.net
|
||||
S: Maintained
|
||||
|
||||
TASKSTATS STATISTICS INTERFACE
|
||||
P: Shailabh Nagar
|
||||
M: nagar@watson.ibm.com
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
TI PARALLEL LINK CABLE DRIVER
|
||||
P: Romain Lievin
|
||||
M: roms@lpg.ticalc.org
|
||||
|
@ -3136,7 +3172,7 @@ S: Maintained
|
|||
VIAPRO SMBUS DRIVER
|
||||
P: Jean Delvare
|
||||
M: khali@linux-fr.org
|
||||
L: lm-sensors@lm-sensors.org
|
||||
L: i2c@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
UCLINUX (AND M68KNOMMU)
|
||||
|
@ -3184,6 +3220,11 @@ S: Maintained
|
|||
W1 DALLAS'S 1-WIRE BUS
|
||||
P: Evgeniy Polyakov
|
||||
M: johnpol@2ka.mipt.ru
|
||||
S: Maintained
|
||||
|
||||
W83791D HARDWARE MONITORING DRIVER
|
||||
P: Charles Spirakis
|
||||
M: bezaur@gmail.com
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 18
|
||||
EXTRAVERSION = -rc1
|
||||
EXTRAVERSION = -rc2
|
||||
NAME=Crazed Snow-Weasel
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/in.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/delay.h>
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/time.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/vt.h>
|
||||
#include <linux/mman.h>
|
||||
#include <linux/elfcore.h>
|
||||
#include <linux/reboot.h>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/user.h>
|
||||
#include <linux/a.out.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/config.h> /* CONFIG_ALPHA_LCA etc */
|
||||
#include <linux/mc146818rtc.h>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
|
||||
#include <asm/compiler.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
|
|
@ -506,7 +506,7 @@ locomo_init_one_child(struct locomo *lchip, struct locomo_dev_info *info)
|
|||
goto out;
|
||||
}
|
||||
|
||||
strncpy(dev->dev.bus_id,info->name,sizeof(dev->dev.bus_id));
|
||||
strncpy(dev->dev.bus_id, info->name, sizeof(dev->dev.bus_id));
|
||||
/*
|
||||
* If the parent device has a DMA mask associated with it,
|
||||
* propagate it down to the children.
|
||||
|
@ -729,7 +729,6 @@ __locomo_probe(struct device *me, struct resource *mem, int irq)
|
|||
|
||||
for (i = 0; i < ARRAY_SIZE(locomo_devices); i++)
|
||||
locomo_init_one_child(lchip, &locomo_devices[i]);
|
||||
|
||||
return 0;
|
||||
|
||||
out:
|
||||
|
|
|
@ -412,8 +412,10 @@ static int sharpsl_check_battery_temp(void)
|
|||
val = get_select_val(buff);
|
||||
|
||||
dev_dbg(sharpsl_pm.dev, "Temperature: %d\n", val);
|
||||
if (val > sharpsl_pm.machinfo->charge_on_temp)
|
||||
if (val > sharpsl_pm.machinfo->charge_on_temp) {
|
||||
printk(KERN_WARNING "Not charging: temperature out of limits.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-rc2
|
||||
# Wed Apr 19 21:21:01 2006
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Sun Jul 9 15:21:30 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -43,14 +47,15 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_OBSOLETE_INTERMODULE=y
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -83,18 +88,26 @@ CONFIG_DEFAULT_IOSCHED="deadline"
|
|||
#
|
||||
# System Type
|
||||
#
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
CONFIG_ARCH_EP93XX=y
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP23XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
|
@ -102,20 +115,18 @@ CONFIG_ARCH_EP93XX=y
|
|||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
|
||||
#
|
||||
# Cirrus EP93xx Implementation Options
|
||||
#
|
||||
CONFIG_CRUNCH=y
|
||||
|
||||
#
|
||||
# EP93xx Platforms
|
||||
#
|
||||
CONFIG_MACH_EDB9302=y
|
||||
CONFIG_MACH_EDB9315=y
|
||||
CONFIG_MACH_EDB9315A=y
|
||||
CONFIG_MACH_GESBC9312=y
|
||||
CONFIG_MACH_TS72XX=y
|
||||
|
||||
|
@ -166,6 +177,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -233,6 +245,8 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
|
@ -240,6 +254,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -294,6 +309,7 @@ CONFIG_STANDALONE=y
|
|||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -386,6 +402,8 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=1
|
|||
#
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_VERIFY_WRITE=y
|
||||
# CONFIG_MTD_NAND_ECC_SMC is not set
|
||||
CONFIG_MTD_NAND_TS7250=y
|
||||
CONFIG_MTD_NAND_IDS=y
|
||||
# CONFIG_MTD_NAND_DISKONCHIP is not set
|
||||
# CONFIG_MTD_NAND_NANDSIM is not set
|
||||
|
@ -582,6 +600,7 @@ CONFIG_EP93XX_WATCHDOG=y
|
|||
# USB-based Watchdog Cards
|
||||
#
|
||||
# CONFIG_USBPCWATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -613,6 +632,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
#
|
||||
# I2C Hardware Bus support
|
||||
#
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_STUB is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
|
@ -641,13 +661,13 @@ CONFIG_I2C_DEBUG_CHIP=y
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_ABITUGURU is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
|
@ -675,8 +695,10 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83791D is not set
|
||||
# CONFIG_SENSORS_W83792D is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
|
@ -704,6 +726,7 @@ CONFIG_HWMON=y
|
|||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -714,6 +737,7 @@ CONFIG_HWMON=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
|
@ -806,6 +830,7 @@ CONFIG_USB_SERIAL_CONSOLE=y
|
|||
# CONFIG_USB_SERIAL_GENERIC is not set
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
# CONFIG_USB_SERIAL_ANYDATA is not set
|
||||
# CONFIG_USB_SERIAL_ARK3116 is not set
|
||||
# CONFIG_USB_SERIAL_BELKIN is not set
|
||||
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
||||
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
|
||||
|
@ -833,6 +858,7 @@ CONFIG_USB_SERIAL_PL2303=y
|
|||
# CONFIG_USB_SERIAL_TI is not set
|
||||
# CONFIG_USB_SERIAL_CYBERJACK is not set
|
||||
# CONFIG_USB_SERIAL_XIRCOM is not set
|
||||
# CONFIG_USB_SERIAL_OPTION is not set
|
||||
# CONFIG_USB_SERIAL_OMNINET is not set
|
||||
|
||||
#
|
||||
|
@ -845,10 +871,12 @@ CONFIG_USB_SERIAL_PL2303=y
|
|||
# CONFIG_USB_LEGOTOWER is not set
|
||||
# CONFIG_USB_LCD is not set
|
||||
# CONFIG_USB_LED is not set
|
||||
# CONFIG_USB_CY7C63 is not set
|
||||
# CONFIG_USB_CYTHERM is not set
|
||||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_APPLEDISPLAY is not set
|
||||
# CONFIG_USB_LD is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
|
||||
|
@ -880,17 +908,24 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
|||
CONFIG_RTC_INTF_SYSFS=y
|
||||
CONFIG_RTC_INTF_PROC=y
|
||||
CONFIG_RTC_INTF_DEV=y
|
||||
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
|
||||
|
||||
#
|
||||
# RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_X1205 is not set
|
||||
# CONFIG_RTC_DRV_DS1307 is not set
|
||||
# CONFIG_RTC_DRV_DS1553 is not set
|
||||
# CONFIG_RTC_DRV_DS1672 is not set
|
||||
# CONFIG_RTC_DRV_DS1742 is not set
|
||||
# CONFIG_RTC_DRV_PCF8563 is not set
|
||||
# CONFIG_RTC_DRV_PCF8583 is not set
|
||||
# CONFIG_RTC_DRV_RS5C372 is not set
|
||||
CONFIG_RTC_DRV_M48T86=y
|
||||
CONFIG_RTC_DRV_EP93XX=y
|
||||
# CONFIG_RTC_DRV_PL031 is not set
|
||||
# CONFIG_RTC_DRV_TEST is not set
|
||||
# CONFIG_RTC_DRV_V3020 is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
|
@ -910,6 +945,7 @@ CONFIG_JBD=y
|
|||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
|
@ -957,6 +993,7 @@ CONFIG_JFFS2_FS=y
|
|||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -986,6 +1023,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -1066,15 +1104,20 @@ CONFIG_NLS_ISO8859_1=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
CONFIG_DEBUG_SLAB=y
|
||||
# CONFIG_DEBUG_SLAB_LEAK is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1114,3 +1157,4 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=y
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-rc2
|
||||
# Wed Apr 19 21:12:49 2006
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Sun Jul 9 15:28:50 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -43,14 +47,15 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_OBSOLETE_INTERMODULE=y
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -83,18 +88,26 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
#
|
||||
# System Type
|
||||
#
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
CONFIG_ARCH_IXP2000=y
|
||||
# CONFIG_ARCH_IXP23XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
|
@ -102,12 +115,6 @@ CONFIG_ARCH_IXP2000=y
|
|||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
|
||||
|
||||
#
|
||||
|
@ -171,6 +178,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -218,6 +226,8 @@ CONFIG_NET=y
|
|||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM=y
|
||||
# CONFIG_XFRM_USER is not set
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_IP_MULTICAST is not set
|
||||
|
@ -236,6 +246,8 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
|
@ -243,6 +255,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -297,6 +310,7 @@ CONFIG_STANDALONE=y
|
|||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -525,6 +539,7 @@ CONFIG_ENP2611_MSF_NET=y
|
|||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
# CONFIG_MYRI10GE is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -542,7 +557,6 @@ CONFIG_ENP2611_MSF_NET=y
|
|||
CONFIG_WAN=y
|
||||
# CONFIG_DSCC4 is not set
|
||||
# CONFIG_LANMEDIA is not set
|
||||
# CONFIG_SYNCLINK_SYNCPPP is not set
|
||||
CONFIG_HDLC=y
|
||||
CONFIG_HDLC_RAW=y
|
||||
# CONFIG_HDLC_RAW_ETH is not set
|
||||
|
@ -654,6 +668,7 @@ CONFIG_IXP2000_WATCHDOG=y
|
|||
#
|
||||
# CONFIG_PCIPCWATCHDOG is not set
|
||||
# CONFIG_WDTPCI is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -697,6 +712,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_PIIX4 is not set
|
||||
CONFIG_I2C_IXP2000=y
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
|
@ -733,13 +749,13 @@ CONFIG_SENSORS_EEPROM=y
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_ABITUGURU is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
|
@ -768,10 +784,12 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_VIA686A is not set
|
||||
# CONFIG_SENSORS_VT8231 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83791D is not set
|
||||
# CONFIG_SENSORS_W83792D is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
|
@ -799,6 +817,7 @@ CONFIG_HWMON=y
|
|||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -808,6 +827,7 @@ CONFIG_HWMON=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
|
@ -866,6 +886,7 @@ CONFIG_FS_POSIX_ACL=y
|
|||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
|
@ -910,6 +931,7 @@ CONFIG_JFFS2_FS=y
|
|||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -939,6 +961,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -980,14 +1003,19 @@ CONFIG_MSDOS_PARTITION=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1027,3 +1055,4 @@ CONFIG_CRC32=y
|
|||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-rc2
|
||||
# Wed Apr 19 21:13:50 2006
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Sun Jul 9 14:13:35 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -43,14 +47,15 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_OBSOLETE_INTERMODULE=y
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -83,18 +88,26 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
#
|
||||
# System Type
|
||||
#
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_IXP2000 is not set
|
||||
CONFIG_ARCH_IXP23XX=y
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
|
@ -102,12 +115,6 @@ CONFIG_ARCH_IXP23XX=y
|
|||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
|
||||
|
||||
#
|
||||
|
@ -165,6 +172,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_RESOURCES_64BIT=y
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -212,6 +220,8 @@ CONFIG_NET=y
|
|||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM=y
|
||||
# CONFIG_XFRM_USER is not set
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_IP_MULTICAST is not set
|
||||
|
@ -230,6 +240,8 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
|
@ -237,6 +249,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -291,6 +304,7 @@ CONFIG_STANDALONE=y
|
|||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -520,6 +534,7 @@ CONFIG_BLK_DEV_SD=y
|
|||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_HPTIOP is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
|
@ -641,6 +656,7 @@ CONFIG_E1000_NAPI=y
|
|||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
# CONFIG_MYRI10GE is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -658,7 +674,6 @@ CONFIG_E1000_NAPI=y
|
|||
CONFIG_WAN=y
|
||||
# CONFIG_DSCC4 is not set
|
||||
# CONFIG_LANMEDIA is not set
|
||||
# CONFIG_SYNCLINK_SYNCPPP is not set
|
||||
CONFIG_HDLC=y
|
||||
CONFIG_HDLC_RAW=y
|
||||
# CONFIG_HDLC_RAW_ETH is not set
|
||||
|
@ -775,6 +790,7 @@ CONFIG_WATCHDOG=y
|
|||
# USB-based Watchdog Cards
|
||||
#
|
||||
# CONFIG_USBPCWATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -817,6 +833,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
|
@ -853,13 +870,13 @@ CONFIG_SENSORS_EEPROM=y
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_ABITUGURU is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
|
@ -888,10 +905,12 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_VIA686A is not set
|
||||
# CONFIG_SENSORS_VT8231 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83791D is not set
|
||||
# CONFIG_SENSORS_W83792D is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
|
@ -919,6 +938,7 @@ CONFIG_HWMON=y
|
|||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -929,6 +949,7 @@ CONFIG_HWMON=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
|
@ -959,6 +980,7 @@ CONFIG_USB=y
|
|||
CONFIG_USB_EHCI_HCD=y
|
||||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
|
@ -1050,10 +1072,12 @@ CONFIG_USB_MON=y
|
|||
# CONFIG_USB_LEGOTOWER is not set
|
||||
# CONFIG_USB_LCD is not set
|
||||
# CONFIG_USB_LED is not set
|
||||
# CONFIG_USB_CY7C63 is not set
|
||||
# CONFIG_USB_CYTHERM is not set
|
||||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_APPLEDISPLAY is not set
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
# CONFIG_USB_LD is not set
|
||||
|
||||
|
@ -1100,6 +1124,7 @@ CONFIG_FS_POSIX_ACL=y
|
|||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
|
@ -1146,6 +1171,7 @@ CONFIG_JFFS2_FS=y
|
|||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -1175,6 +1201,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -1255,14 +1282,19 @@ CONFIG_NLS_CODEPAGE_437=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1302,3 +1334,4 @@ CONFIG_CRC32=y
|
|||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-git2
|
||||
# Wed Jun 21 22:20:18 2006
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Sun Jul 9 14:15:23 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_ARCH_MTD_XIP=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -43,10 +47,12 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
@ -85,7 +91,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
|
@ -117,6 +123,7 @@ CONFIG_MACH_LOGICPD_PXA270=y
|
|||
# CONFIG_MACH_MAINSTONE is not set
|
||||
# CONFIG_ARCH_PXA_IDP is not set
|
||||
# CONFIG_PXA_SHARPSL is not set
|
||||
# CONFIG_MACH_TRIZEPS4 is not set
|
||||
CONFIG_PXA27x=y
|
||||
CONFIG_IWMMXT=y
|
||||
|
||||
|
@ -161,6 +168,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -194,8 +202,6 @@ CONFIG_BINFMT_ELF=y
|
|||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
# CONFIG_PM_LEGACY is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
# CONFIG_APM is not set
|
||||
|
||||
#
|
||||
|
@ -293,6 +299,7 @@ CONFIG_STANDALONE=y
|
|||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -561,6 +568,7 @@ CONFIG_SERIO_LIBPS2=y
|
|||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
|
@ -588,6 +596,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -617,13 +626,13 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_ABITUGURU is not set
|
||||
# CONFIG_SENSORS_F71805F is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
|
||||
|
@ -658,12 +667,13 @@ CONFIG_VIDEO_V4L2=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
CONFIG_FB_FIRMWARE_EDID=y
|
||||
# CONFIG_FB_BACKLIGHT is not set
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
|
@ -822,6 +832,7 @@ CONFIG_JFFS2_FS=y
|
|||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -849,6 +860,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -914,14 +926,19 @@ CONFIG_NLS_ISO8859_1=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
|
@ -961,3 +978,4 @@ CONFIG_CRC32=y
|
|||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-git10
|
||||
# Mon Jun 26 13:45:44 2006
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Sun Jul 9 14:16:20 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -42,10 +46,12 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
@ -86,7 +92,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
CONFIG_ARCH_AT91=y
|
||||
CONFIG_ARCH_AT91RM9200=y
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
|
@ -111,9 +116,16 @@ CONFIG_ARCH_AT91RM9200=y
|
|||
# CONFIG_ARCH_OMAP is not set
|
||||
|
||||
#
|
||||
# AT91RM9200 Implementations
|
||||
# Atmel AT91 System-on-Chip
|
||||
#
|
||||
|
||||
#
|
||||
# Atmel AT91 Processors
|
||||
#
|
||||
CONFIG_ARCH_AT91RM9200=y
|
||||
# CONFIG_ARCH_AT91SAM9260 is not set
|
||||
# CONFIG_ARCH_AT91SAM9261 is not set
|
||||
|
||||
#
|
||||
# AT91RM9200 Board Type
|
||||
#
|
||||
|
@ -123,12 +135,12 @@ CONFIG_MACH_ONEARM=y
|
|||
# CONFIG_MACH_CSB337 is not set
|
||||
# CONFIG_MACH_CSB637 is not set
|
||||
# CONFIG_MACH_CARMEVA is not set
|
||||
# CONFIG_MACH_KB9200 is not set
|
||||
# CONFIG_MACH_ATEB9200 is not set
|
||||
# CONFIG_MACH_KB9200 is not set
|
||||
# CONFIG_MACH_KAFA is not set
|
||||
|
||||
#
|
||||
# AT91RM9200 Feature Selections
|
||||
# AT91 Feature Selections
|
||||
#
|
||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
||||
|
||||
|
@ -186,6 +198,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_LEDS_TIMER=y
|
||||
# CONFIG_LEDS_CPU is not set
|
||||
|
@ -600,6 +613,7 @@ CONFIG_AT91_WATCHDOG=y
|
|||
# USB-based Watchdog Cards
|
||||
#
|
||||
# CONFIG_USBPCWATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -743,6 +757,7 @@ CONFIG_VIDEO_V4L2=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
|
@ -980,6 +995,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -1006,14 +1022,19 @@ CONFIG_MSDOS_PARTITION=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
# CONFIG_MAGIC_SYSRQ is not set
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1052,3 +1073,4 @@ CONFIG_DEBUG_LL=y
|
|||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -370,17 +370,6 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)
|
|||
features &= ~(PCI_COMMAND_SERR | PCI_COMMAND_PARITY);
|
||||
|
||||
switch (dev->class >> 8) {
|
||||
#if defined(CONFIG_ISA) || defined(CONFIG_EISA)
|
||||
case PCI_CLASS_BRIDGE_ISA:
|
||||
case PCI_CLASS_BRIDGE_EISA:
|
||||
/*
|
||||
* If this device is an ISA bridge, set isa_bridge
|
||||
* to point at this device. We will then go looking
|
||||
* for things like keyboard, etc.
|
||||
*/
|
||||
isa_bridge = dev;
|
||||
break;
|
||||
#endif
|
||||
case PCI_CLASS_BRIDGE_PCI:
|
||||
pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &status);
|
||||
status |= PCI_BRIDGE_CTL_PARITY|PCI_BRIDGE_CTL_MASTER_ABORT;
|
||||
|
|
|
@ -167,6 +167,16 @@ void __init init_IRQ(void)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
|
||||
static void route_irq(struct irqdesc *desc, unsigned int irq, unsigned int cpu)
|
||||
{
|
||||
pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->cpu, cpu);
|
||||
|
||||
spin_lock_irq(&desc->lock);
|
||||
desc->chip->set_affinity(irq, cpumask_of_cpu(cpu));
|
||||
spin_unlock_irq(&desc->lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* The CPU has been marked offline. Migrate IRQs off this CPU. If
|
||||
* the affinity settings do not allow other CPUs, force them onto any
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <linux/console.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/root_dev.h>
|
||||
#include <linux/cpu.h>
|
||||
|
|
|
@ -83,8 +83,8 @@ static struct scoop_pcmcia_config collie_pcmcia_config = {
|
|||
|
||||
|
||||
static struct mcp_plat_data collie_mcp_data = {
|
||||
.mccr0 = MCCR0_ADM,
|
||||
.sclk_rate = 11981000,
|
||||
.mccr0 = MCCR0_ADM | MCCR0_ExtClk,
|
||||
.sclk_rate = 9216000,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SHARP_LOCOMO
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
* Li-ion batteries are angry beasts, and they like to explode. This driver is not finished,
|
||||
* and sometimes charges them when it should not. If it makes angry lithium to come your way...
|
||||
* ...well, you have been warned.
|
||||
*
|
||||
* Actually, this should be quite safe, it seems sharp leaves charger enabled by default,
|
||||
* and my collie did not explode (yet).
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
@ -40,9 +43,8 @@ static void collie_charger_init(void)
|
|||
{
|
||||
int err;
|
||||
|
||||
if (sharpsl_param.adadj != -1) {
|
||||
if (sharpsl_param.adadj != -1)
|
||||
ad_revise = sharpsl_param.adadj;
|
||||
}
|
||||
|
||||
/* Register interrupt handler. */
|
||||
if ((err = request_irq(COLLIE_IRQ_GPIO_AC_IN, sharpsl_ac_isr, IRQF_DISABLED,
|
||||
|
@ -72,27 +74,17 @@ static void collie_measure_temp(int on)
|
|||
|
||||
static void collie_charge(int on)
|
||||
{
|
||||
if (on) {
|
||||
printk("Should start charger\n");
|
||||
} else {
|
||||
printk("Should stop charger\n");
|
||||
}
|
||||
#ifdef I_AM_SURE
|
||||
extern struct platform_device colliescoop_device;
|
||||
|
||||
/* Zaurus seems to contain LTC1731 ; it should know when to
|
||||
/* Zaurus seems to contain LTC1731; it should know when to
|
||||
* stop charging itself, so setting charge on should be
|
||||
* relatively harmless (as long as it is not done too often).
|
||||
*/
|
||||
#define CF_BUF_CTRL_BASE 0xF0800000
|
||||
#define SCOOP_REG(adr) (*(volatile unsigned short*)(CF_BUF_CTRL_BASE+(adr)))
|
||||
#define SCOOP_REG_GPWR SCOOP_REG(SCOOP_GPWR)
|
||||
|
||||
if (on) {
|
||||
set_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON);
|
||||
} else {
|
||||
reset_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void collie_discharge(int on)
|
||||
|
@ -127,7 +119,6 @@ int collie_read_backup_battery(void)
|
|||
|
||||
ucb1x00_adc_enable(ucb);
|
||||
|
||||
/* Gives 75..130 */
|
||||
ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_BBAT_ON, 0);
|
||||
voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC);
|
||||
|
||||
|
@ -146,9 +137,8 @@ int collie_read_main_battery(void)
|
|||
ucb1x00_adc_enable(ucb);
|
||||
ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_BBAT_ON);
|
||||
ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_MBAT_ON, 0);
|
||||
/* gives values 160..255 with battery removed... and
|
||||
145..255 with battery inserted. (on AC), goes as low as
|
||||
80 on DC. */
|
||||
|
||||
mdelay(1);
|
||||
voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC);
|
||||
|
||||
ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_MBAT_ON);
|
||||
|
@ -192,7 +182,7 @@ static unsigned long read_devdata(int which)
|
|||
case SHARPSL_BATT_TEMP:
|
||||
return collie_read_temp();
|
||||
case SHARPSL_ACIN_VOLT:
|
||||
return 0x1;
|
||||
return 500;
|
||||
case SHARPSL_STATUS_ACIN: {
|
||||
int ret = GPLR & COLLIE_GPIO_AC_IN;
|
||||
printk("AC status = %d\n", ret);
|
||||
|
@ -208,10 +198,33 @@ static unsigned long read_devdata(int which)
|
|||
}
|
||||
}
|
||||
|
||||
struct battery_thresh collie_battery_levels_acin[] = {
|
||||
{ 420, 100},
|
||||
{ 417, 95},
|
||||
{ 415, 90},
|
||||
{ 413, 80},
|
||||
{ 411, 75},
|
||||
{ 408, 70},
|
||||
{ 406, 60},
|
||||
{ 403, 50},
|
||||
{ 398, 40},
|
||||
{ 391, 25},
|
||||
{ 10, 5},
|
||||
{ 0, 0},
|
||||
};
|
||||
|
||||
struct battery_thresh collie_battery_levels[] = {
|
||||
{ 368, 100},
|
||||
{ 358, 25},
|
||||
{ 356, 5},
|
||||
{ 394, 100},
|
||||
{ 390, 95},
|
||||
{ 380, 90},
|
||||
{ 370, 80},
|
||||
{ 368, 75}, /* From sharp code: battery high with frontlight */
|
||||
{ 366, 70}, /* 60..90 -- fake values invented by me for testing */
|
||||
{ 364, 60},
|
||||
{ 362, 50},
|
||||
{ 360, 40},
|
||||
{ 358, 25}, /* From sharp code: battery low with frontlight */
|
||||
{ 356, 5}, /* From sharp code: battery verylow with frontlight */
|
||||
{ 0, 0},
|
||||
};
|
||||
|
||||
|
@ -226,13 +239,21 @@ struct sharpsl_charger_machinfo collie_pm_machinfo = {
|
|||
.postsuspend = collie_postsuspend,
|
||||
.charger_wakeup = collie_charger_wakeup,
|
||||
.should_wakeup = collie_should_wakeup,
|
||||
.bat_levels = 3,
|
||||
.bat_levels = 12,
|
||||
.bat_levels_noac = collie_battery_levels,
|
||||
.bat_levels_acin = collie_battery_levels,
|
||||
.bat_levels_acin = collie_battery_levels_acin,
|
||||
.status_high_acin = 368,
|
||||
.status_low_acin = 358,
|
||||
.status_high_noac = 368,
|
||||
.status_low_noac = 358,
|
||||
.charge_on_volt = 350, /* spitz uses 2.90V, but lets play it safe. */
|
||||
.charge_on_temp = 550,
|
||||
.charge_acin_high = 550, /* collie does not seem to have sensor for this, anyway */
|
||||
.charge_acin_low = 450, /* ignored, too */
|
||||
.fatal_acin_volt = 356,
|
||||
.fatal_noacin_volt = 356,
|
||||
|
||||
.batfull_irq = 1, /* We do not want periodical charge restarts */
|
||||
};
|
||||
|
||||
static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev)
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <asm/hardware/arm_timer.h>
|
||||
#include <asm/hardware/icst307.h>
|
||||
#include <asm/hardware/vic.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
@ -352,11 +353,7 @@ static const struct icst307_params versatile_oscvco_params = {
|
|||
static void versatile_oscvco_set(struct clk *clk, struct icst307_vco vco)
|
||||
{
|
||||
void __iomem *sys_lock = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_LOCK_OFFSET;
|
||||
#if defined(CONFIG_ARCH_VERSATILE_PB)
|
||||
void __iomem *sys_osc = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSC4_OFFSET;
|
||||
#elif defined(CONFIG_MACH_VERSATILE_AB)
|
||||
void __iomem *sys_osc = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSC1_OFFSET;
|
||||
#endif
|
||||
void __iomem *sys_osc = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSCCLCD_OFFSET;
|
||||
u32 val;
|
||||
|
||||
val = readl(sys_osc) & ~0x7ffff;
|
||||
|
@ -529,7 +526,7 @@ static void versatile_clcd_disable(struct clcd_fb *fb)
|
|||
/*
|
||||
* If the LCD is Sanyo 2x5 in on the IB2 board, turn the back-light off
|
||||
*/
|
||||
if (fb->panel == &sanyo_2_5_in) {
|
||||
if (machine_is_versatile_ab() && fb->panel == &sanyo_2_5_in) {
|
||||
void __iomem *versatile_ib2_ctrl = __io_address(VERSATILE_IB2_CTRL);
|
||||
unsigned long ctrl;
|
||||
|
||||
|
@ -578,7 +575,7 @@ static void versatile_clcd_enable(struct clcd_fb *fb)
|
|||
/*
|
||||
* If the LCD is Sanyo 2x5 in on the IB2 board, turn the back-light on
|
||||
*/
|
||||
if (fb->panel == &sanyo_2_5_in) {
|
||||
if (machine_is_versatile_ab() && fb->panel == &sanyo_2_5_in) {
|
||||
void __iomem *versatile_ib2_ctrl = __io_address(VERSATILE_IB2_CTRL);
|
||||
unsigned long ctrl;
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ typedef struct {
|
|||
u16 __padding;
|
||||
#endif
|
||||
u64 low;
|
||||
} floatx80;
|
||||
} __attribute__ ((packed,aligned(4))) floatx80;
|
||||
|
||||
/*
|
||||
-------------------------------------------------------------------------------
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <linux/console.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/root_dev.h>
|
||||
|
||||
|
|
|
@ -450,9 +450,9 @@ int __init eeprom_init(void)
|
|||
static int eeprom_open(struct inode * inode, struct file * file)
|
||||
{
|
||||
|
||||
if(MINOR(inode->i_rdev) != EEPROM_MINOR_NR)
|
||||
if(iminor(inode) != EEPROM_MINOR_NR)
|
||||
return -ENXIO;
|
||||
if(MAJOR(inode->i_rdev) != EEPROM_MAJOR_NR)
|
||||
if(imajor(inode) != EEPROM_MAJOR_NR)
|
||||
return -ENXIO;
|
||||
|
||||
if( eeprom.size > 0 )
|
||||
|
|
|
@ -435,7 +435,7 @@ static int
|
|||
gpio_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct gpio_private *priv;
|
||||
int p = MINOR(inode->i_rdev);
|
||||
int p = iminor(inode);
|
||||
|
||||
if (p > GPIO_MINOR_LAST)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -2302,7 +2302,7 @@ static int cryptocop_job_setup(struct cryptocop_prio_job **pj, struct cryptocop_
|
|||
|
||||
static int cryptocop_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
int p = MINOR(inode->i_rdev);
|
||||
int p = iminor(inode);
|
||||
|
||||
if (p != CRYPTOCOP_MINOR) return -EINVAL;
|
||||
|
||||
|
|
|
@ -418,7 +418,7 @@ static int
|
|||
gpio_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct gpio_private *priv;
|
||||
int p = MINOR(inode->i_rdev);
|
||||
int p = iminor(inode);
|
||||
|
||||
if (p > GPIO_MINOR_LAST)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -324,14 +324,12 @@ pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned
|
|||
int
|
||||
pcf8563_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
MOD_INC_USE_COUNT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
pcf8563_release(struct inode *inode, struct file *filp)
|
||||
{
|
||||
MOD_DEC_USE_COUNT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -340,7 +340,7 @@ static inline int sync_data_avail_to_end(struct sync_port *port)
|
|||
|
||||
static int sync_serial_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
int dev = MINOR(inode->i_rdev);
|
||||
int dev = iminor(inode);
|
||||
sync_port* port;
|
||||
reg_dma_rw_cfg cfg = {.en = regk_dma_yes};
|
||||
reg_dma_rw_intr_mask intr_mask = {.data = regk_dma_yes};
|
||||
|
@ -486,7 +486,7 @@ static int sync_serial_open(struct inode *inode, struct file *file)
|
|||
|
||||
static int sync_serial_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
int dev = MINOR(inode->i_rdev);
|
||||
int dev = iminor(inode);
|
||||
sync_port* port;
|
||||
|
||||
if (dev < 0 || dev >= NUMBER_OF_PORTS || !ports[dev].enabled)
|
||||
|
@ -504,7 +504,7 @@ static int sync_serial_release(struct inode *inode, struct file *file)
|
|||
|
||||
static unsigned int sync_serial_poll(struct file *file, poll_table *wait)
|
||||
{
|
||||
int dev = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
int dev = iminor(file->f_dentry->d_inode);
|
||||
unsigned int mask = 0;
|
||||
sync_port* port;
|
||||
DEBUGPOLL( static unsigned int prev_mask = 0; );
|
||||
|
@ -531,7 +531,7 @@ static int sync_serial_ioctl(struct inode *inode, struct file *file,
|
|||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
int return_val = 0;
|
||||
int dev = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
int dev = iminor(file->f_dentry->d_inode);
|
||||
sync_port* port;
|
||||
reg_sser_rw_tr_cfg tr_cfg;
|
||||
reg_sser_rw_rec_cfg rec_cfg;
|
||||
|
@ -789,7 +789,7 @@ static int sync_serial_ioctl(struct inode *inode, struct file *file,
|
|||
static ssize_t sync_serial_write(struct file * file, const char * buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
int dev = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
int dev = iminor(file->f_dentry->d_inode);
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
sync_port *port;
|
||||
unsigned long c, c1;
|
||||
|
@ -919,7 +919,7 @@ static ssize_t sync_serial_write(struct file * file, const char * buf,
|
|||
static ssize_t sync_serial_read(struct file * file, char * buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
int dev = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
int dev = iminor(file->f_dentry->d_inode);
|
||||
int avail;
|
||||
sync_port *port;
|
||||
unsigned char* start;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include <linux/bootmem.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/utsname.h>
|
||||
#include <linux/pfn.h>
|
||||
|
||||
|
|
|
@ -1 +1,115 @@
|
|||
/* Dummy asm-offsets.c file. Required by kbuild and ready to be used - hint! */
|
||||
/*
|
||||
* Generate definitions needed by assembly language modules.
|
||||
* This code generates raw asm output which is post-processed
|
||||
* to extract and format the required data.
|
||||
*/
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/personality.h>
|
||||
#include <asm/registers.h>
|
||||
#include <asm/ucontext.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/gdb-stub.h>
|
||||
|
||||
#define DEFINE(sym, val) \
|
||||
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
|
||||
|
||||
#define DEF_PTREG(sym, reg) \
|
||||
asm volatile("\n->" #sym " %0 offsetof(struct pt_regs, " #reg ")" \
|
||||
: : "i" (offsetof(struct pt_regs, reg)))
|
||||
|
||||
#define DEF_IREG(sym, reg) \
|
||||
asm volatile("\n->" #sym " %0 offsetof(struct user_context, " #reg ")" \
|
||||
: : "i" (offsetof(struct user_context, reg)))
|
||||
|
||||
#define DEF_FREG(sym, reg) \
|
||||
asm volatile("\n->" #sym " %0 offsetof(struct user_context, " #reg ")" \
|
||||
: : "i" (offsetof(struct user_context, reg)))
|
||||
|
||||
#define DEF_0REG(sym, reg) \
|
||||
asm volatile("\n->" #sym " %0 offsetof(struct frv_frame0, " #reg ")" \
|
||||
: : "i" (offsetof(struct frv_frame0, reg)))
|
||||
|
||||
#define BLANK() asm volatile("\n->" : : )
|
||||
|
||||
#define OFFSET(sym, str, mem) \
|
||||
DEFINE(sym, offsetof(struct str, mem));
|
||||
|
||||
void foo(void)
|
||||
{
|
||||
/* offsets into the thread_info structure */
|
||||
OFFSET(TI_TASK, thread_info, task);
|
||||
OFFSET(TI_EXEC_DOMAIN, thread_info, exec_domain);
|
||||
OFFSET(TI_FLAGS, thread_info, flags);
|
||||
OFFSET(TI_STATUS, thread_info, status);
|
||||
OFFSET(TI_CPU, thread_info, cpu);
|
||||
OFFSET(TI_PREEMPT_COUNT, thread_info, preempt_count);
|
||||
OFFSET(TI_ADDR_LIMIT, thread_info, addr_limit);
|
||||
OFFSET(TI_RESTART_BLOCK, thread_info, restart_block);
|
||||
BLANK();
|
||||
|
||||
/* offsets into register file storage */
|
||||
DEF_PTREG(REG_PSR, psr);
|
||||
DEF_PTREG(REG_ISR, isr);
|
||||
DEF_PTREG(REG_CCR, ccr);
|
||||
DEF_PTREG(REG_CCCR, cccr);
|
||||
DEF_PTREG(REG_LR, lr);
|
||||
DEF_PTREG(REG_LCR, lcr);
|
||||
DEF_PTREG(REG_PC, pc);
|
||||
DEF_PTREG(REG__STATUS, __status);
|
||||
DEF_PTREG(REG_SYSCALLNO, syscallno);
|
||||
DEF_PTREG(REG_ORIG_GR8, orig_gr8);
|
||||
DEF_PTREG(REG_GNER0, gner0);
|
||||
DEF_PTREG(REG_GNER1, gner1);
|
||||
DEF_PTREG(REG_IACC0, iacc0);
|
||||
DEF_PTREG(REG_TBR, tbr);
|
||||
DEF_PTREG(REG_GR0, tbr);
|
||||
DEFINE(REG__END, sizeof(struct pt_regs));
|
||||
BLANK();
|
||||
|
||||
DEF_0REG(REG_DCR, debug.dcr);
|
||||
DEF_0REG(REG_IBAR0, debug.ibar[0]);
|
||||
DEF_0REG(REG_DBAR0, debug.dbar[0]);
|
||||
DEF_0REG(REG_DBDR00, debug.dbdr[0][0]);
|
||||
DEF_0REG(REG_DBMR00, debug.dbmr[0][0]);
|
||||
BLANK();
|
||||
|
||||
DEF_IREG(__INT_GR0, i.gr[0]);
|
||||
DEF_FREG(__USER_FPMEDIA, f);
|
||||
DEF_FREG(__FPMEDIA_FR0, f.fr[0]);
|
||||
DEF_FREG(__FPMEDIA_FNER0, f.fner[0]);
|
||||
DEF_FREG(__FPMEDIA_MSR0, f.msr[0]);
|
||||
DEF_FREG(__FPMEDIA_ACC0, f.acc[0]);
|
||||
DEF_FREG(__FPMEDIA_ACCG0, f.accg[0]);
|
||||
DEF_FREG(__FPMEDIA_FSR0, f.fsr[0]);
|
||||
BLANK();
|
||||
|
||||
DEFINE(NR_PT_REGS, sizeof(struct pt_regs) / 4);
|
||||
DEFINE(NR_USER_INT_REGS, sizeof(struct user_int_regs) / 4);
|
||||
DEFINE(NR_USER_FPMEDIA_REGS, sizeof(struct user_fpmedia_regs) / 4);
|
||||
DEFINE(NR_USER_CONTEXT, sizeof(struct user_context) / 4);
|
||||
DEFINE(FRV_FRAME0_SIZE, sizeof(struct frv_frame0));
|
||||
BLANK();
|
||||
|
||||
/* offsets into thread_struct */
|
||||
OFFSET(__THREAD_FRAME, thread_struct, frame);
|
||||
OFFSET(__THREAD_CURR, thread_struct, curr);
|
||||
OFFSET(__THREAD_SP, thread_struct, sp);
|
||||
OFFSET(__THREAD_FP, thread_struct, fp);
|
||||
OFFSET(__THREAD_LR, thread_struct, lr);
|
||||
OFFSET(__THREAD_PC, thread_struct, pc);
|
||||
OFFSET(__THREAD_GR16, thread_struct, gr[0]);
|
||||
OFFSET(__THREAD_SCHED_LR, thread_struct, sched_lr);
|
||||
OFFSET(__THREAD_FRAME0, thread_struct, frame0);
|
||||
OFFSET(__THREAD_USER, thread_struct, user);
|
||||
BLANK();
|
||||
|
||||
/* offsets into frv_debug_status */
|
||||
OFFSET(DEBUG_BPSR, frv_debug_status, bpsr);
|
||||
OFFSET(DEBUG_DCR, frv_debug_status, dcr);
|
||||
OFFSET(DEBUG_BRR, frv_debug_status, brr);
|
||||
OFFSET(DEBUG_NMAR, frv_debug_status, nmar);
|
||||
BLANK();
|
||||
}
|
||||
|
|
|
@ -9,11 +9,11 @@
|
|||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/sys.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/segment.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/spr-regs.h>
|
||||
|
||||
#include <asm/errno.h>
|
||||
|
@ -23,13 +23,11 @@
|
|||
#
|
||||
.section .bss.stack
|
||||
.globl __break_user_context
|
||||
.balign 8192
|
||||
.balign THREAD_SIZE
|
||||
__break_stack:
|
||||
.space (8192 - (USER_CONTEXT_SIZE + REG__DEBUG_XTRA)) & ~7
|
||||
__break_stack_tos:
|
||||
.space REG__DEBUG_XTRA
|
||||
__break_user_context:
|
||||
.space USER_CONTEXT_SIZE
|
||||
.space THREAD_SIZE - FRV_FRAME0_SIZE
|
||||
__break_frame_0:
|
||||
.space FRV_FRAME0_SIZE
|
||||
|
||||
#
|
||||
# miscellaneous variables
|
||||
|
@ -74,8 +72,8 @@ __entry_break:
|
|||
#endif
|
||||
LEDS 0x1001,gr31
|
||||
|
||||
sethi.p %hi(__break_user_context),gr31
|
||||
setlo %lo(__break_user_context),gr31
|
||||
sethi.p %hi(__break_frame_0),gr31
|
||||
setlo %lo(__break_frame_0),gr31
|
||||
|
||||
stdi gr2,@(gr31,#REG_GR(2))
|
||||
movsg ccr,gr3
|
||||
|
@ -585,8 +583,8 @@ __break_continue:
|
|||
# set up the kernel stack pointer
|
||||
sti sp,@(gr31,#REG_SP)
|
||||
|
||||
sethi.p %hi(__break_stack_tos),sp
|
||||
setlo %lo(__break_stack_tos),sp
|
||||
sethi.p %hi(__break_frame_0),sp
|
||||
setlo %lo(__break_frame_0),sp
|
||||
|
||||
# finish building the exception frame
|
||||
stdi gr4 ,@(gr31,#REG_GR(4))
|
||||
|
@ -651,9 +649,12 @@ __break_continue:
|
|||
movsg nmar,gr5
|
||||
movsg dcr,gr6
|
||||
|
||||
stdi gr4 ,@(gr31,#REG_BRR)
|
||||
sti gr19,@(gr31,#REG_BPSR)
|
||||
sti.p gr6 ,@(gr31,#REG_DCR)
|
||||
sethi.p %hi(__debug_status),gr7
|
||||
setlo %lo(__debug_status),gr7
|
||||
|
||||
stdi gr4 ,@(gr7,#DEBUG_BRR)
|
||||
sti gr19,@(gr7,#DEBUG_BPSR)
|
||||
sti.p gr6 ,@(gr7,#DEBUG_DCR)
|
||||
|
||||
# trap exceptions during break handling and disable h/w breakpoints/watchpoints
|
||||
sethi %hi(DCR_EBE),gr5
|
||||
|
@ -698,7 +699,10 @@ __break_continue:
|
|||
lddi @(gr31,#REG_PSR) ,gr22
|
||||
ldi @(gr31,#REG_PC) ,gr21
|
||||
ldi @(gr31,#REG_TBR) ,gr20
|
||||
ldi.p @(gr31,#REG_DCR) ,gr6
|
||||
|
||||
sethi.p %hi(__debug_status),gr6
|
||||
setlo %lo(__debug_status),gr6
|
||||
ldi.p @(gr6,#DEBUG_DCR) ,gr6
|
||||
|
||||
andi gr22,#PSR_S,gr19 /* rebuild BPSR */
|
||||
andi.p gr22,#PSR_ET,gr5
|
||||
|
|
|
@ -39,10 +39,9 @@ do { \
|
|||
gdbstub_do_rx(); \
|
||||
} while(!FLOWCTL_QUERY(LINE))
|
||||
|
||||
static void __init debug_stub_init(void);
|
||||
struct frv_debug_status __debug_status;
|
||||
|
||||
extern asmlinkage void __break_hijack_kernel_event(void);
|
||||
extern asmlinkage void __break_hijack_kernel_event_breaks_here(void);
|
||||
static void __init debug_stub_init(void);
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
|
@ -67,7 +66,7 @@ asmlinkage void debug_stub(void)
|
|||
__set_HSR(0, hsr0 & ~HSR0_ETMD);
|
||||
|
||||
/* disable single stepping */
|
||||
__debug_regs->dcr &= ~DCR_SE;
|
||||
__debug_status.dcr &= ~DCR_SE;
|
||||
|
||||
/* kernel mode can propose an exception be handled in debug mode by jumping to a special
|
||||
* location */
|
||||
|
@ -76,8 +75,8 @@ asmlinkage void debug_stub(void)
|
|||
* the top kernel context */
|
||||
*__debug_frame = *__frame;
|
||||
__frame = __debug_frame->next_frame;
|
||||
__debug_regs->brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_regs->brr |= BRR_EB;
|
||||
__debug_status.brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_status.brr |= BRR_EB;
|
||||
}
|
||||
|
||||
if (__debug_frame->pc == (unsigned long) __debug_bug_trap + 4) {
|
||||
|
@ -124,7 +123,7 @@ static void __init debug_stub_init(void)
|
|||
__debug_frame->pc = (unsigned long) start_kernel;
|
||||
|
||||
/* enable the debug events we want to trap */
|
||||
__debug_regs->dcr = DCR_EBE;
|
||||
__debug_status.dcr = DCR_EBE;
|
||||
|
||||
#ifdef CONFIG_GDBSTUB
|
||||
gdbstub_init();
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/sys.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/setup.h>
|
||||
|
|
|
@ -124,6 +124,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/nmi.h>
|
||||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/gdb-stub.h>
|
||||
|
@ -136,7 +137,6 @@ extern void debug_to_serial(const char *p, int n);
|
|||
extern void gdbstub_console_write(struct console *co, const char *p, unsigned n);
|
||||
|
||||
extern volatile uint32_t __break_error_detect[3]; /* ESFR1, ESR15, EAR15 */
|
||||
extern struct user_context __break_user_context;
|
||||
|
||||
struct __debug_amr {
|
||||
unsigned long L, P;
|
||||
|
@ -926,6 +926,7 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & DCR_IBE0)) {
|
||||
//gdbstub_printk("set h/w break 0: %08lx\n", addr);
|
||||
__debug_regs->dcr |= DCR_IBE0;
|
||||
__debug_regs->ibar[0] = addr;
|
||||
asm volatile("movgs %0,ibar0" : : "r"(addr));
|
||||
return 0;
|
||||
}
|
||||
|
@ -933,6 +934,7 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & DCR_IBE1)) {
|
||||
//gdbstub_printk("set h/w break 1: %08lx\n", addr);
|
||||
__debug_regs->dcr |= DCR_IBE1;
|
||||
__debug_regs->ibar[1] = addr;
|
||||
asm volatile("movgs %0,ibar1" : : "r"(addr));
|
||||
return 0;
|
||||
}
|
||||
|
@ -940,6 +942,7 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & DCR_IBE2)) {
|
||||
//gdbstub_printk("set h/w break 2: %08lx\n", addr);
|
||||
__debug_regs->dcr |= DCR_IBE2;
|
||||
__debug_regs->ibar[2] = addr;
|
||||
asm volatile("movgs %0,ibar2" : : "r"(addr));
|
||||
return 0;
|
||||
}
|
||||
|
@ -947,6 +950,7 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & DCR_IBE3)) {
|
||||
//gdbstub_printk("set h/w break 3: %08lx\n", addr);
|
||||
__debug_regs->dcr |= DCR_IBE3;
|
||||
__debug_regs->ibar[3] = addr;
|
||||
asm volatile("movgs %0,ibar3" : : "r"(addr));
|
||||
return 0;
|
||||
}
|
||||
|
@ -971,7 +975,14 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & (DCR_DRBE0|DCR_DWBE0))) {
|
||||
//gdbstub_printk("set h/w watchpoint 0 type %ld: %08lx\n", type, addr);
|
||||
tmp = type==2 ? DCR_DWBE0 : type==3 ? DCR_DRBE0 : DCR_DRBE0|DCR_DWBE0;
|
||||
|
||||
__debug_regs->dcr |= tmp;
|
||||
__debug_regs->dbar[0] = addr;
|
||||
__debug_regs->dbmr[0][0] = dbmr.mask0;
|
||||
__debug_regs->dbmr[0][1] = dbmr.mask1;
|
||||
__debug_regs->dbdr[0][0] = 0;
|
||||
__debug_regs->dbdr[0][1] = 0;
|
||||
|
||||
asm volatile(" movgs %0,dbar0 \n"
|
||||
" movgs %1,dbmr00 \n"
|
||||
" movgs %2,dbmr01 \n"
|
||||
|
@ -984,7 +995,14 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & (DCR_DRBE1|DCR_DWBE1))) {
|
||||
//gdbstub_printk("set h/w watchpoint 1 type %ld: %08lx\n", type, addr);
|
||||
tmp = type==2 ? DCR_DWBE1 : type==3 ? DCR_DRBE1 : DCR_DRBE1|DCR_DWBE1;
|
||||
|
||||
__debug_regs->dcr |= tmp;
|
||||
__debug_regs->dbar[1] = addr;
|
||||
__debug_regs->dbmr[1][0] = dbmr.mask0;
|
||||
__debug_regs->dbmr[1][1] = dbmr.mask1;
|
||||
__debug_regs->dbdr[1][0] = 0;
|
||||
__debug_regs->dbdr[1][1] = 0;
|
||||
|
||||
asm volatile(" movgs %0,dbar1 \n"
|
||||
" movgs %1,dbmr10 \n"
|
||||
" movgs %2,dbmr11 \n"
|
||||
|
@ -1047,6 +1065,7 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
if (__debug_regs->dcr & DCR_IBE0 && __get_ibar(0) == addr) {
|
||||
//gdbstub_printk("clear h/w break 0: %08lx\n", addr);
|
||||
__debug_regs->dcr &= ~DCR_IBE0;
|
||||
__debug_regs->ibar[0] = 0;
|
||||
asm volatile("movgs gr0,ibar0");
|
||||
return 0;
|
||||
}
|
||||
|
@ -1054,6 +1073,7 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
if (__debug_regs->dcr & DCR_IBE1 && __get_ibar(1) == addr) {
|
||||
//gdbstub_printk("clear h/w break 1: %08lx\n", addr);
|
||||
__debug_regs->dcr &= ~DCR_IBE1;
|
||||
__debug_regs->ibar[1] = 0;
|
||||
asm volatile("movgs gr0,ibar1");
|
||||
return 0;
|
||||
}
|
||||
|
@ -1061,6 +1081,7 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
if (__debug_regs->dcr & DCR_IBE2 && __get_ibar(2) == addr) {
|
||||
//gdbstub_printk("clear h/w break 2: %08lx\n", addr);
|
||||
__debug_regs->dcr &= ~DCR_IBE2;
|
||||
__debug_regs->ibar[2] = 0;
|
||||
asm volatile("movgs gr0,ibar2");
|
||||
return 0;
|
||||
}
|
||||
|
@ -1068,6 +1089,7 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
if (__debug_regs->dcr & DCR_IBE3 && __get_ibar(3) == addr) {
|
||||
//gdbstub_printk("clear h/w break 3: %08lx\n", addr);
|
||||
__debug_regs->dcr &= ~DCR_IBE3;
|
||||
__debug_regs->ibar[3] = 0;
|
||||
asm volatile("movgs gr0,ibar3");
|
||||
return 0;
|
||||
}
|
||||
|
@ -1104,6 +1126,12 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
|
||||
//gdbstub_printk("clear h/w watchpoint 0 type %ld: %08lx\n", type, addr);
|
||||
__debug_regs->dcr &= ~(DCR_DRBE0|DCR_DWBE0);
|
||||
__debug_regs->dbar[0] = 0;
|
||||
__debug_regs->dbmr[0][0] = 0;
|
||||
__debug_regs->dbmr[0][1] = 0;
|
||||
__debug_regs->dbdr[0][0] = 0;
|
||||
__debug_regs->dbdr[0][1] = 0;
|
||||
|
||||
asm volatile(" movgs gr0,dbar0 \n"
|
||||
" movgs gr0,dbmr00 \n"
|
||||
" movgs gr0,dbmr01 \n"
|
||||
|
@ -1123,6 +1151,12 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
|
||||
//gdbstub_printk("clear h/w watchpoint 1 type %ld: %08lx\n", type, addr);
|
||||
__debug_regs->dcr &= ~(DCR_DRBE1|DCR_DWBE1);
|
||||
__debug_regs->dbar[1] = 0;
|
||||
__debug_regs->dbmr[1][0] = 0;
|
||||
__debug_regs->dbmr[1][1] = 0;
|
||||
__debug_regs->dbdr[1][0] = 0;
|
||||
__debug_regs->dbdr[1][1] = 0;
|
||||
|
||||
asm volatile(" movgs gr0,dbar1 \n"
|
||||
" movgs gr0,dbmr10 \n"
|
||||
" movgs gr0,dbmr11 \n"
|
||||
|
@ -1163,7 +1197,7 @@ static void gdbstub_check_breakpoint(void)
|
|||
*/
|
||||
static void __attribute__((unused)) gdbstub_show_regs(void)
|
||||
{
|
||||
uint32_t *reg;
|
||||
unsigned long *reg;
|
||||
int loop;
|
||||
|
||||
gdbstub_printk("\n");
|
||||
|
@ -1172,11 +1206,11 @@ static void __attribute__((unused)) gdbstub_show_regs(void)
|
|||
__debug_frame,
|
||||
__debug_frame->psr & PSR_S ? "kernel" : "user");
|
||||
|
||||
reg = (uint32_t *) __debug_frame;
|
||||
for (loop = 0; loop < REG__END; loop++) {
|
||||
printk("%s %08x", regnames[loop + 0], reg[loop + 0]);
|
||||
reg = (unsigned long *) __debug_frame;
|
||||
for (loop = 0; loop < NR_PT_REGS; loop++) {
|
||||
printk("%s %08lx", regnames[loop + 0], reg[loop + 0]);
|
||||
|
||||
if (loop == REG__END - 1 || loop % 5 == 4)
|
||||
if (loop == NR_PT_REGS - 1 || loop % 5 == 4)
|
||||
printk("\n");
|
||||
else
|
||||
printk(" | ");
|
||||
|
@ -1191,13 +1225,8 @@ static void __attribute__((unused)) gdbstub_show_regs(void)
|
|||
*/
|
||||
static void __attribute__((unused)) gdbstub_dump_debugregs(void)
|
||||
{
|
||||
unsigned long x;
|
||||
|
||||
x = __debug_regs->dcr;
|
||||
gdbstub_printk("DCR %08lx ", x);
|
||||
|
||||
x = __debug_regs->brr;
|
||||
gdbstub_printk("BRR %08lx\n", x);
|
||||
gdbstub_printk("DCR %08lx ", __debug_status.dcr);
|
||||
gdbstub_printk("BRR %08lx\n", __debug_status.brr);
|
||||
|
||||
gdbstub_printk("IBAR0 %08lx ", __get_ibar(0));
|
||||
gdbstub_printk("IBAR1 %08lx ", __get_ibar(1));
|
||||
|
@ -1360,7 +1389,7 @@ void gdbstub(int sigval)
|
|||
#endif
|
||||
}
|
||||
|
||||
save_user_regs(&__break_user_context);
|
||||
save_user_regs(&__debug_frame0->uc);
|
||||
|
||||
#if 0
|
||||
gdbstub_printk("--> gdbstub() %08x %p %08x %08x\n",
|
||||
|
@ -1389,8 +1418,8 @@ void gdbstub(int sigval)
|
|||
__debug_frame->psr &= ~PSR_S;
|
||||
if (__debug_frame->psr & PSR_PS)
|
||||
__debug_frame->psr |= PSR_S;
|
||||
__debug_regs->brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_regs->brr |= BRR_EB;
|
||||
__debug_status.brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_status.brr |= BRR_EB;
|
||||
sigval = SIGINT;
|
||||
}
|
||||
|
||||
|
@ -1404,15 +1433,15 @@ void gdbstub(int sigval)
|
|||
__debug_frame->psr &= ~PSR_S;
|
||||
if (__debug_frame->psr & PSR_PS)
|
||||
__debug_frame->psr |= PSR_S;
|
||||
__debug_regs->brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_regs->brr |= BRR_EB;
|
||||
__debug_status.brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_status.brr |= BRR_EB;
|
||||
sigval = SIGXCPU;
|
||||
}
|
||||
|
||||
LEDS(0x5002);
|
||||
|
||||
/* after a BREAK insn, the PC lands on the far side of it */
|
||||
if (__debug_regs->brr & BRR_SB)
|
||||
if (__debug_status.brr & BRR_SB)
|
||||
gdbstub_check_breakpoint();
|
||||
|
||||
LEDS(0x5003);
|
||||
|
@ -1431,7 +1460,7 @@ void gdbstub(int sigval)
|
|||
}
|
||||
|
||||
if (!sigval)
|
||||
sigval = gdbstub_compute_signal(__debug_regs->brr);
|
||||
sigval = gdbstub_compute_signal(__debug_status.brr);
|
||||
|
||||
LEDS(0x5004);
|
||||
|
||||
|
@ -1441,7 +1470,7 @@ void gdbstub(int sigval)
|
|||
if (sigval != SIGINT && sigval != SIGTRAP && sigval != SIGILL) {
|
||||
static const char title[] = "Break ";
|
||||
static const char crlf[] = "\r\n";
|
||||
unsigned long brr = __debug_regs->brr;
|
||||
unsigned long brr = __debug_status.brr;
|
||||
char hx;
|
||||
|
||||
ptr = output_buffer;
|
||||
|
@ -1565,28 +1594,24 @@ void gdbstub(int sigval)
|
|||
ptr = mem2hex(&zero, ptr, 4, 0);
|
||||
|
||||
for (loop = 1; loop <= 27; loop++)
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(loop),
|
||||
ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[loop], ptr, 4, 0);
|
||||
temp = (unsigned long) __frame;
|
||||
ptr = mem2hex(&temp, ptr, 4, 0);
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(29), ptr, 4, 0);
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(30), ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[29], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[30], ptr, 4, 0);
|
||||
#ifdef CONFIG_MMU
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(31), ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[31], ptr, 4, 0);
|
||||
#else
|
||||
temp = (unsigned long) __debug_frame;
|
||||
ptr = mem2hex(&temp, ptr, 4, 0);
|
||||
#endif
|
||||
|
||||
for (loop = 32; loop <= 63; loop++)
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(loop),
|
||||
ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[loop], ptr, 4, 0);
|
||||
|
||||
/* deal with FR0-FR63 */
|
||||
for (loop = 0; loop <= 63; loop++)
|
||||
ptr = mem2hex((unsigned long *)&__break_user_context +
|
||||
__FPMEDIA_FR(loop),
|
||||
ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fr[loop], ptr, 4, 0);
|
||||
|
||||
/* deal with special registers */
|
||||
ptr = mem2hex(&__debug_frame->pc, ptr, 4, 0);
|
||||
|
@ -1597,7 +1622,7 @@ void gdbstub(int sigval)
|
|||
ptr = mem2hex(&zero, ptr, 4, 0);
|
||||
ptr = mem2hex(&zero, ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_frame->tbr, ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_regs->brr , ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_status.brr , ptr, 4, 0);
|
||||
|
||||
asm volatile("movsg dbar0,%0" : "=r"(dbar));
|
||||
ptr = mem2hex(&dbar, ptr, 4, 0);
|
||||
|
@ -1622,21 +1647,21 @@ void gdbstub(int sigval)
|
|||
|
||||
ptr = mem2hex(&__debug_frame->iacc0, ptr, 8, 0);
|
||||
|
||||
ptr = mem2hex(&__break_user_context.f.fsr[0], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fsr[0], ptr, 4, 0);
|
||||
|
||||
for (loop = 0; loop <= 7; loop++)
|
||||
ptr = mem2hex(&__break_user_context.f.acc[loop], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.acc[loop], ptr, 4, 0);
|
||||
|
||||
ptr = mem2hex(&__break_user_context.f.accg, ptr, 8, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.accg, ptr, 8, 0);
|
||||
|
||||
for (loop = 0; loop <= 1; loop++)
|
||||
ptr = mem2hex(&__break_user_context.f.msr[loop], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.msr[loop], ptr, 4, 0);
|
||||
|
||||
ptr = mem2hex(&__debug_frame->gner0, ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_frame->gner1, ptr, 4, 0);
|
||||
|
||||
ptr = mem2hex(&__break_user_context.f.fner[0], ptr, 4, 0);
|
||||
ptr = mem2hex(&__break_user_context.f.fner[1], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fner[0], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fner[1], ptr, 4, 0);
|
||||
|
||||
break;
|
||||
|
||||
|
@ -1648,8 +1673,7 @@ void gdbstub(int sigval)
|
|||
ptr = hex2mem(ptr, &temp, 4);
|
||||
|
||||
for (loop = 1; loop <= 27; loop++)
|
||||
ptr = hex2mem(ptr, (unsigned long *)__debug_frame + REG_GR(loop),
|
||||
4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->i.gr[loop], 4);
|
||||
|
||||
ptr = hex2mem(ptr, &temp, 4);
|
||||
__frame = (struct pt_regs *) temp;
|
||||
|
@ -1662,14 +1686,11 @@ void gdbstub(int sigval)
|
|||
#endif
|
||||
|
||||
for (loop = 32; loop <= 63; loop++)
|
||||
ptr = hex2mem(ptr, (unsigned long *)__debug_frame + REG_GR(loop),
|
||||
4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->i.gr[loop], 4);
|
||||
|
||||
/* deal with FR0-FR63 */
|
||||
for (loop = 0; loop <= 63; loop++)
|
||||
ptr = mem2hex((unsigned long *)&__break_user_context +
|
||||
__FPMEDIA_FR(loop),
|
||||
ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fr[loop], ptr, 4, 0);
|
||||
|
||||
/* deal with special registers */
|
||||
ptr = hex2mem(ptr, &__debug_frame->pc, 4);
|
||||
|
@ -1694,21 +1715,21 @@ void gdbstub(int sigval)
|
|||
|
||||
ptr = hex2mem(ptr, &__debug_frame->iacc0, 8);
|
||||
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.fsr[0], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.fsr[0], 4);
|
||||
|
||||
for (loop = 0; loop <= 7; loop++)
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.acc[loop], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.acc[loop], 4);
|
||||
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.accg, 8);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.accg, 8);
|
||||
|
||||
for (loop = 0; loop <= 1; loop++)
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.msr[loop], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.msr[loop], 4);
|
||||
|
||||
ptr = hex2mem(ptr, &__debug_frame->gner0, 4);
|
||||
ptr = hex2mem(ptr, &__debug_frame->gner1, 4);
|
||||
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.fner[0], 4);
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.fner[1], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.fner[0], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.fner[1], 4);
|
||||
|
||||
gdbstub_strcpy(output_buffer,"OK");
|
||||
break;
|
||||
|
@ -1769,52 +1790,52 @@ void gdbstub(int sigval)
|
|||
case GDB_REG_GR(0):
|
||||
break;
|
||||
case GDB_REG_GR(1) ... GDB_REG_GR(63):
|
||||
__break_user_context.i.gr[addr - GDB_REG_GR(0)] = temp;
|
||||
__debug_user_context->i.gr[addr - GDB_REG_GR(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_FR(0) ... GDB_REG_FR(63):
|
||||
__break_user_context.f.fr[addr - GDB_REG_FR(0)] = temp;
|
||||
__debug_user_context->f.fr[addr - GDB_REG_FR(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_PC:
|
||||
__break_user_context.i.pc = temp;
|
||||
__debug_user_context->i.pc = temp;
|
||||
break;
|
||||
case GDB_REG_PSR:
|
||||
__break_user_context.i.psr = temp;
|
||||
__debug_user_context->i.psr = temp;
|
||||
break;
|
||||
case GDB_REG_CCR:
|
||||
__break_user_context.i.ccr = temp;
|
||||
__debug_user_context->i.ccr = temp;
|
||||
break;
|
||||
case GDB_REG_CCCR:
|
||||
__break_user_context.i.cccr = temp;
|
||||
__debug_user_context->i.cccr = temp;
|
||||
break;
|
||||
case GDB_REG_BRR:
|
||||
__debug_regs->brr = temp;
|
||||
__debug_status.brr = temp;
|
||||
break;
|
||||
case GDB_REG_LR:
|
||||
__break_user_context.i.lr = temp;
|
||||
__debug_user_context->i.lr = temp;
|
||||
break;
|
||||
case GDB_REG_LCR:
|
||||
__break_user_context.i.lcr = temp;
|
||||
__debug_user_context->i.lcr = temp;
|
||||
break;
|
||||
case GDB_REG_FSR0:
|
||||
__break_user_context.f.fsr[0] = temp;
|
||||
__debug_user_context->f.fsr[0] = temp;
|
||||
break;
|
||||
case GDB_REG_ACC(0) ... GDB_REG_ACC(7):
|
||||
__break_user_context.f.acc[addr - GDB_REG_ACC(0)] = temp;
|
||||
__debug_user_context->f.acc[addr - GDB_REG_ACC(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_ACCG(0):
|
||||
*(uint32_t *) &__break_user_context.f.accg[0] = temp;
|
||||
*(uint32_t *) &__debug_user_context->f.accg[0] = temp;
|
||||
break;
|
||||
case GDB_REG_ACCG(4):
|
||||
*(uint32_t *) &__break_user_context.f.accg[4] = temp;
|
||||
*(uint32_t *) &__debug_user_context->f.accg[4] = temp;
|
||||
break;
|
||||
case GDB_REG_MSR(0) ... GDB_REG_MSR(1):
|
||||
__break_user_context.f.msr[addr - GDB_REG_MSR(0)] = temp;
|
||||
__debug_user_context->f.msr[addr - GDB_REG_MSR(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_GNER(0) ... GDB_REG_GNER(1):
|
||||
__break_user_context.i.gner[addr - GDB_REG_GNER(0)] = temp;
|
||||
__debug_user_context->i.gner[addr - GDB_REG_GNER(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_FNER(0) ... GDB_REG_FNER(1):
|
||||
__break_user_context.f.fner[addr - GDB_REG_FNER(0)] = temp;
|
||||
__debug_user_context->f.fner[addr - GDB_REG_FNER(0)] = temp;
|
||||
break;
|
||||
default:
|
||||
temp2 = 0;
|
||||
|
@ -1850,6 +1871,7 @@ void gdbstub(int sigval)
|
|||
/* step to next instruction */
|
||||
case 's':
|
||||
__debug_regs->dcr |= DCR_SE;
|
||||
__debug_status.dcr |= DCR_SE;
|
||||
goto done;
|
||||
|
||||
/* set baud rate (bBB) */
|
||||
|
@ -1934,7 +1956,7 @@ void gdbstub(int sigval)
|
|||
}
|
||||
|
||||
done:
|
||||
restore_user_regs(&__break_user_context);
|
||||
restore_user_regs(&__debug_frame0->uc);
|
||||
|
||||
//gdbstub_dump_debugregs();
|
||||
//gdbstub_printk("<-- gdbstub() %08x\n", __debug_frame->pc);
|
||||
|
@ -1966,7 +1988,6 @@ void __init gdbstub_init(void)
|
|||
#endif
|
||||
|
||||
gdbstub_printk("%s", gdbstub_banner);
|
||||
gdbstub_printk("DCR: %x\n", __debug_regs->dcr);
|
||||
|
||||
gdbstub_io_init();
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include <linux/threads.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/spr-regs.h>
|
||||
|
|
|
@ -51,6 +51,9 @@ extern void (*__power_switch_wake_cleanup)(void);
|
|||
/* time.c */
|
||||
extern void time_divisor_init(void);
|
||||
|
||||
/* cmode.S */
|
||||
extern asmlinkage void frv_change_cmode(int);
|
||||
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* _FRV_LOCAL_H */
|
||||
|
|
|
@ -26,11 +26,6 @@
|
|||
|
||||
#include "local.h"
|
||||
|
||||
void (*pm_power_off)(void);
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
extern void frv_change_cmode(int);
|
||||
|
||||
/*
|
||||
* Debug macros
|
||||
*/
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/kernel.h>
|
||||
|
@ -25,6 +26,7 @@
|
|||
#include <linux/reboot.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/setup.h>
|
||||
|
@ -38,6 +40,9 @@ asmlinkage void ret_from_fork(void);
|
|||
|
||||
#include <asm/pgalloc.h>
|
||||
|
||||
void (*pm_power_off)(void);
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
struct task_struct *alloc_task_struct(void)
|
||||
{
|
||||
struct task_struct *p = kmalloc(THREAD_SIZE, GFP_KERNEL);
|
||||
|
@ -203,7 +208,7 @@ int copy_thread(int nr, unsigned long clone_flags,
|
|||
|
||||
regs0 = __kernel_frame0_ptr;
|
||||
childregs0 = (struct pt_regs *)
|
||||
(task_stack_page(p) + THREAD_SIZE - USER_CONTEXT_SIZE);
|
||||
(task_stack_page(p) + THREAD_SIZE - FRV_FRAME0_SIZE);
|
||||
childregs = childregs0;
|
||||
|
||||
/* set up the userspace frame (the only place that the USP is stored) */
|
||||
|
@ -367,3 +372,11 @@ int elf_check_arch(const struct elf32_hdr *hdr)
|
|||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpregs)
|
||||
{
|
||||
memcpy(fpregs,
|
||||
¤t->thread.user->f,
|
||||
sizeof(current->thread.user->f));
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
# 2 of the License, or (at your option) any later version.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/processor.h>
|
||||
|
@ -30,7 +31,7 @@
|
|||
# address of frame 0 (userspace) on current kernel stack
|
||||
.globl __kernel_frame0_ptr
|
||||
__kernel_frame0_ptr:
|
||||
.long init_thread_union + THREAD_SIZE - USER_CONTEXT_SIZE
|
||||
.long init_thread_union + THREAD_SIZE - FRV_FRAME0_SIZE
|
||||
|
||||
# address of current task
|
||||
.globl __kernel_current_task
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/fpu.h>
|
||||
#include <asm/system.h>
|
||||
|
@ -279,20 +280,20 @@ static const char *regnames[] = {
|
|||
|
||||
void show_regs(struct pt_regs *regs)
|
||||
{
|
||||
uint32_t *reg;
|
||||
unsigned long *reg;
|
||||
int loop;
|
||||
|
||||
printk("\n");
|
||||
|
||||
printk("Frame: @%08x [%s]\n",
|
||||
(uint32_t) regs,
|
||||
printk("Frame: @%08lx [%s]\n",
|
||||
(unsigned long) regs,
|
||||
regs->psr & PSR_S ? "kernel" : "user");
|
||||
|
||||
reg = (uint32_t *) regs;
|
||||
for (loop = 0; loop < REG__END; loop++) {
|
||||
printk("%s %08x", regnames[loop + 0], reg[loop + 0]);
|
||||
reg = (unsigned long *) regs;
|
||||
for (loop = 0; loop < NR_PT_REGS; loop++) {
|
||||
printk("%s %08lx", regnames[loop + 0], reg[loop + 0]);
|
||||
|
||||
if (loop == REG__END - 1 || loop % 5 == 4)
|
||||
if (loop == NR_PT_REGS - 1 || loop % 5 == 4)
|
||||
printk("\n");
|
||||
else
|
||||
printk(" | ");
|
||||
|
@ -328,7 +329,7 @@ void die_if_kernel(const char *str, ...)
|
|||
*/
|
||||
static void show_backtrace_regs(struct pt_regs *frame)
|
||||
{
|
||||
uint32_t *reg;
|
||||
unsigned long *reg;
|
||||
int loop;
|
||||
|
||||
/* print the registers for this frame */
|
||||
|
@ -336,11 +337,11 @@ static void show_backtrace_regs(struct pt_regs *frame)
|
|||
frame->psr & PSR_S ? "Kernel Mode" : "User Mode",
|
||||
frame);
|
||||
|
||||
reg = (uint32_t *) frame;
|
||||
for (loop = 0; loop < REG__END; loop++) {
|
||||
printk("%s %08x", regnames[loop + 0], reg[loop + 0]);
|
||||
reg = (unsigned long *) frame;
|
||||
for (loop = 0; loop < NR_PT_REGS; loop++) {
|
||||
printk("%s %08lx", regnames[loop + 0], reg[loop + 0]);
|
||||
|
||||
if (loop == REG__END - 1 || loop % 5 == 4)
|
||||
if (loop == NR_PT_REGS - 1 || loop % 5 == 4)
|
||||
printk("\n");
|
||||
else
|
||||
printk(" | ");
|
||||
|
|
|
@ -406,7 +406,9 @@ int __init pcibios_init(void)
|
|||
ioport_resource.end = (__reg_MB86943_sl_pci_io_range << 9) | 0x3ff;
|
||||
ioport_resource.end += ioport_resource.start;
|
||||
|
||||
printk("PCI IO window: %08lx-%08lx\n", ioport_resource.start, ioport_resource.end);
|
||||
printk("PCI IO window: %08llx-%08llx\n",
|
||||
(unsigned long long) ioport_resource.start,
|
||||
(unsigned long long) ioport_resource.end);
|
||||
|
||||
iomem_resource.start = (__reg_MB86943_sl_pci_mem_base << 9) & 0xfffffc00;
|
||||
|
||||
|
@ -416,8 +418,11 @@ int __init pcibios_init(void)
|
|||
iomem_resource.end = (__reg_MB86943_sl_pci_mem_range << 9) | 0x3ff;
|
||||
iomem_resource.end += iomem_resource.start;
|
||||
|
||||
printk("PCI MEM window: %08lx-%08lx\n", iomem_resource.start, iomem_resource.end);
|
||||
printk("PCI DMA memory: %08lx-%08lx\n", dma_coherent_mem_start, dma_coherent_mem_end);
|
||||
printk("PCI MEM window: %08llx-%08llx\n",
|
||||
(unsigned long long) iomem_resource.start,
|
||||
(unsigned long long) iomem_resource.end);
|
||||
printk("PCI DMA memory: %08lx-%08lx\n",
|
||||
dma_coherent_mem_start, dma_coherent_mem_end);
|
||||
|
||||
if (!pci_probe)
|
||||
return -ENXIO;
|
||||
|
|
|
@ -197,7 +197,7 @@ CONFIG_PM=y
|
|||
# CONFIG_PM_LEGACY is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_SOFTWARE_SUSPEND=y
|
||||
CONFIG_PM_STD_PARTITION="/dev/hda2"
|
||||
CONFIG_PM_STD_PARTITION=""
|
||||
|
||||
#
|
||||
# ACPI (Advanced Configuration and Power Interface) Support
|
||||
|
|
|
@ -90,7 +90,7 @@ static void crash_save_self(struct pt_regs *regs)
|
|||
crash_save_this_cpu(regs, cpu);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC)
|
||||
static atomic_t waiting_for_crash_ipi;
|
||||
|
||||
static int crash_nmi_callback(struct pt_regs *regs, int cpu)
|
||||
|
|
|
@ -79,6 +79,7 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
|
|||
|
||||
memset(bitmap, 0xff, IO_BITMAP_BYTES);
|
||||
t->io_bitmap_ptr = bitmap;
|
||||
set_thread_flag(TIF_IO_BITMAP);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -359,16 +359,16 @@ EXPORT_SYMBOL(kernel_thread);
|
|||
*/
|
||||
void exit_thread(void)
|
||||
{
|
||||
struct task_struct *tsk = current;
|
||||
struct thread_struct *t = &tsk->thread;
|
||||
|
||||
/* The process may have allocated an io port bitmap... nuke it. */
|
||||
if (unlikely(NULL != t->io_bitmap_ptr)) {
|
||||
if (unlikely(test_thread_flag(TIF_IO_BITMAP))) {
|
||||
struct task_struct *tsk = current;
|
||||
struct thread_struct *t = &tsk->thread;
|
||||
int cpu = get_cpu();
|
||||
struct tss_struct *tss = &per_cpu(init_tss, cpu);
|
||||
|
||||
kfree(t->io_bitmap_ptr);
|
||||
t->io_bitmap_ptr = NULL;
|
||||
clear_thread_flag(TIF_IO_BITMAP);
|
||||
/*
|
||||
* Careful, clear this in the TSS too:
|
||||
*/
|
||||
|
@ -387,6 +387,7 @@ void flush_thread(void)
|
|||
|
||||
memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
|
||||
memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));
|
||||
clear_tsk_thread_flag(tsk, TIF_DEBUG);
|
||||
/*
|
||||
* Forget coprocessor state..
|
||||
*/
|
||||
|
@ -431,7 +432,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
|
|||
savesegment(gs,p->thread.gs);
|
||||
|
||||
tsk = current;
|
||||
if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) {
|
||||
if (unlikely(test_tsk_thread_flag(tsk, TIF_IO_BITMAP))) {
|
||||
p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);
|
||||
if (!p->thread.io_bitmap_ptr) {
|
||||
p->thread.io_bitmap_max = 0;
|
||||
|
@ -439,6 +440,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
|
|||
}
|
||||
memcpy(p->thread.io_bitmap_ptr, tsk->thread.io_bitmap_ptr,
|
||||
IO_BITMAP_BYTES);
|
||||
set_tsk_thread_flag(p, TIF_IO_BITMAP);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -533,10 +535,24 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static inline void
|
||||
handle_io_bitmap(struct thread_struct *next, struct tss_struct *tss)
|
||||
static noinline void __switch_to_xtra(struct task_struct *next_p,
|
||||
struct tss_struct *tss)
|
||||
{
|
||||
if (!next->io_bitmap_ptr) {
|
||||
struct thread_struct *next;
|
||||
|
||||
next = &next_p->thread;
|
||||
|
||||
if (test_tsk_thread_flag(next_p, TIF_DEBUG)) {
|
||||
set_debugreg(next->debugreg[0], 0);
|
||||
set_debugreg(next->debugreg[1], 1);
|
||||
set_debugreg(next->debugreg[2], 2);
|
||||
set_debugreg(next->debugreg[3], 3);
|
||||
/* no 4 and 5 */
|
||||
set_debugreg(next->debugreg[6], 6);
|
||||
set_debugreg(next->debugreg[7], 7);
|
||||
}
|
||||
|
||||
if (!test_tsk_thread_flag(next_p, TIF_IO_BITMAP)) {
|
||||
/*
|
||||
* Disable the bitmap via an invalid offset. We still cache
|
||||
* the previous bitmap owner and the IO bitmap contents:
|
||||
|
@ -544,6 +560,7 @@ handle_io_bitmap(struct thread_struct *next, struct tss_struct *tss)
|
|||
tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET;
|
||||
return;
|
||||
}
|
||||
|
||||
if (likely(next == tss->io_bitmap_owner)) {
|
||||
/*
|
||||
* Previous owner of the bitmap (hence the bitmap content)
|
||||
|
@ -671,20 +688,11 @@ struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct tas
|
|||
set_iopl_mask(next->iopl);
|
||||
|
||||
/*
|
||||
* Now maybe reload the debug registers
|
||||
* Now maybe handle debug registers and/or IO bitmaps
|
||||
*/
|
||||
if (unlikely(next->debugreg[7])) {
|
||||
set_debugreg(next->debugreg[0], 0);
|
||||
set_debugreg(next->debugreg[1], 1);
|
||||
set_debugreg(next->debugreg[2], 2);
|
||||
set_debugreg(next->debugreg[3], 3);
|
||||
/* no 4 and 5 */
|
||||
set_debugreg(next->debugreg[6], 6);
|
||||
set_debugreg(next->debugreg[7], 7);
|
||||
}
|
||||
|
||||
if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr))
|
||||
handle_io_bitmap(next, tss);
|
||||
if (unlikely((task_thread_info(next_p)->flags & _TIF_WORK_CTXSW))
|
||||
|| test_tsk_thread_flag(prev_p, TIF_IO_BITMAP))
|
||||
__switch_to_xtra(next_p, tss);
|
||||
|
||||
disable_tsc(prev_p, next_p);
|
||||
|
||||
|
|
|
@ -468,8 +468,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
for(i=0; i<4; i++)
|
||||
if ((0x5f54 >> ((data >> (16 + 4*i)) & 0xf)) & 1)
|
||||
goto out_tsk;
|
||||
if (data)
|
||||
set_tsk_thread_flag(child, TIF_DEBUG);
|
||||
else
|
||||
clear_tsk_thread_flag(child, TIF_DEBUG);
|
||||
}
|
||||
|
||||
addr -= (long) &dummy->u_debugreg;
|
||||
addr = addr >> 2;
|
||||
child->thread.debugreg[addr] = data;
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/mmzone.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/apm_bios.h>
|
||||
|
@ -1327,7 +1327,10 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat
|
|||
res->start = e820.map[i].addr;
|
||||
res->end = res->start + e820.map[i].size - 1;
|
||||
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
||||
request_resource(&iomem_resource, res);
|
||||
if (request_resource(&iomem_resource, res)) {
|
||||
kfree(res);
|
||||
continue;
|
||||
}
|
||||
if (e820.map[i].type == E820_RAM) {
|
||||
/*
|
||||
* We don't know which RAM region contains kernel data,
|
||||
|
|
|
@ -206,15 +206,16 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
|||
unsigned long get_cmos_time(void)
|
||||
{
|
||||
unsigned long retval;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock(&rtc_lock);
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
|
||||
if (efi_enabled)
|
||||
retval = efi_get_time();
|
||||
else
|
||||
retval = mach_get_cmos_time();
|
||||
|
||||
spin_unlock(&rtc_lock);
|
||||
spin_unlock_irqrestore(&rtc_lock, flags);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -100,13 +100,13 @@ int register_die_notifier(struct notifier_block *nb)
|
|||
vmalloc_sync_all();
|
||||
return atomic_notifier_chain_register(&i386die_chain, nb);
|
||||
}
|
||||
EXPORT_SYMBOL(register_die_notifier);
|
||||
EXPORT_SYMBOL(register_die_notifier); /* used modular by kdb */
|
||||
|
||||
int unregister_die_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return atomic_notifier_chain_unregister(&i386die_chain, nb);
|
||||
}
|
||||
EXPORT_SYMBOL(unregister_die_notifier);
|
||||
EXPORT_SYMBOL(unregister_die_notifier); /* used modular by kdb */
|
||||
|
||||
static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
|
||||
{
|
||||
|
@ -324,35 +324,35 @@ void show_registers(struct pt_regs *regs)
|
|||
|
||||
static void handle_BUG(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long eip = regs->eip;
|
||||
unsigned short ud2;
|
||||
unsigned short line;
|
||||
char *file;
|
||||
char c;
|
||||
unsigned long eip;
|
||||
|
||||
eip = regs->eip;
|
||||
|
||||
if (eip < PAGE_OFFSET)
|
||||
goto no_bug;
|
||||
return;
|
||||
if (__get_user(ud2, (unsigned short __user *)eip))
|
||||
goto no_bug;
|
||||
return;
|
||||
if (ud2 != 0x0b0f)
|
||||
goto no_bug;
|
||||
if (__get_user(line, (unsigned short __user *)(eip + 2)))
|
||||
goto bug;
|
||||
if (__get_user(file, (char * __user *)(eip + 4)) ||
|
||||
(unsigned long)file < PAGE_OFFSET || __get_user(c, file))
|
||||
file = "<bad filename>";
|
||||
return;
|
||||
|
||||
printk(KERN_EMERG "------------[ cut here ]------------\n");
|
||||
printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
|
||||
|
||||
no_bug:
|
||||
return;
|
||||
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
||||
do {
|
||||
unsigned short line;
|
||||
char *file;
|
||||
char c;
|
||||
|
||||
/* Here we know it was a BUG but file-n-line is unavailable */
|
||||
bug:
|
||||
printk(KERN_EMERG "Kernel BUG\n");
|
||||
if (__get_user(line, (unsigned short __user *)(eip + 2)))
|
||||
break;
|
||||
if (__get_user(file, (char * __user *)(eip + 4)) ||
|
||||
(unsigned long)file < PAGE_OFFSET || __get_user(c, file))
|
||||
file = "<bad filename>";
|
||||
|
||||
printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
|
||||
return;
|
||||
} while (0);
|
||||
#endif
|
||||
printk(KERN_EMERG "Kernel BUG at [verbose debug info unavailable]\n");
|
||||
}
|
||||
|
||||
/* This is gone through when something in the kernel
|
||||
|
|
|
@ -843,7 +843,6 @@ unsigned long __copy_from_user_ll_nocache_nozero(void *to, const void __user *fr
|
|||
unsigned long
|
||||
copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
{
|
||||
might_sleep();
|
||||
BUG_ON((long) n < 0);
|
||||
if (access_ok(VERIFY_WRITE, to, n))
|
||||
n = __copy_to_user(to, from, n);
|
||||
|
@ -870,7 +869,6 @@ EXPORT_SYMBOL(copy_to_user);
|
|||
unsigned long
|
||||
copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||
{
|
||||
might_sleep();
|
||||
BUG_ON((long) n < 0);
|
||||
if (access_ok(VERIFY_READ, from, n))
|
||||
n = __copy_from_user(to, from, n);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <linux/oprofile.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <asm/nmi.h>
|
||||
#include <asm/msr.h>
|
||||
#include <asm/apic.h>
|
||||
|
@ -296,12 +297,14 @@ static int nmi_create_files(struct super_block * sb, struct dentry * root)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int p4force;
|
||||
module_param(p4force, int, 0);
|
||||
|
||||
static int __init p4_init(char ** cpu_type)
|
||||
{
|
||||
__u8 cpu_model = boot_cpu_data.x86_model;
|
||||
|
||||
if (cpu_model > 4)
|
||||
if (!p4force && (cpu_model > 6 || cpu_model == 5))
|
||||
return 0;
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
|
|
|
@ -17,10 +17,6 @@
|
|||
|
||||
#include "pci.h"
|
||||
|
||||
#ifdef CONFIG_PCI_BIOS
|
||||
extern void pcibios_sort(void);
|
||||
#endif
|
||||
|
||||
unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
|
||||
PCI_PROBE_MMCONF;
|
||||
|
||||
|
|
|
@ -84,4 +84,4 @@ extern int pci_conf1_read(unsigned int seg, unsigned int bus,
|
|||
extern void pci_direct_init(void);
|
||||
extern void pci_pcbios_init(void);
|
||||
extern void pci_mmcfg_init(void);
|
||||
|
||||
extern void pcibios_sort(void);
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/sched.h>
|
||||
|
|
|
@ -759,7 +759,7 @@ valid_phys_addr_range (unsigned long phys_addr, unsigned long size)
|
|||
}
|
||||
|
||||
int
|
||||
valid_mmap_phys_addr_range (unsigned long phys_addr, unsigned long size)
|
||||
valid_mmap_phys_addr_range (unsigned long pfn, unsigned long size)
|
||||
{
|
||||
/*
|
||||
* MMIO regions are often missing from the EFI memory map.
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include <linux/seq_file.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/threads.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/serial_core.h>
|
||||
|
|
|
@ -650,7 +650,7 @@ pci_mmap_legacy_page_range(struct pci_bus *bus, struct vm_area_struct *vma)
|
|||
* Avoid attribute aliasing. See Documentation/ia64/aliasing.txt
|
||||
* for more details.
|
||||
*/
|
||||
if (!valid_mmap_phys_addr_range(vma->vm_pgoff << PAGE_SHIFT, size))
|
||||
if (!valid_mmap_phys_addr_range(vma->vm_pgoff, size))
|
||||
return -EINVAL;
|
||||
prot = phys_mem_access_prot(NULL, vma->vm_pgoff, size,
|
||||
vma->vm_page_prot);
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/sched.h>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include <linux/root_dev.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/nodemask.h>
|
||||
#include <linux/pfn.h>
|
||||
|
|
|
@ -480,6 +480,7 @@ config MOMENCO_OCELOT_G
|
|||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select ARCH_SPARSEMEM_ENABLE
|
||||
help
|
||||
The Ocelot is a MIPS-based Single Board Computer (SBC) made by
|
||||
Momentum Computer <http://www.momenco.com/>.
|
||||
|
@ -556,6 +557,7 @@ config QEMU
|
|||
select SYS_HAS_CPU_MIPS32_R1
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select ARCH_SPARSEMEM_ENABLE
|
||||
help
|
||||
Qemu is a software emulator which among other architectures also
|
||||
can simulate a MIPS32 4Kc system. This patch adds support for the
|
||||
|
@ -594,7 +596,6 @@ config SGI_IP22
|
|||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select SYS_SUPPORTS_SMP
|
||||
help
|
||||
This are the SGI Indy, Challenge S and Indigo2, as well as certain
|
||||
OEM variants like the Tandem CMN B006S. To compile a Linux kernel
|
||||
|
@ -1688,6 +1689,13 @@ config ARCH_DISCONTIGMEM_ENABLE
|
|||
or have huge holes in the physical address space for other reasons.
|
||||
See <file:Documentation/vm/numa> for more.
|
||||
|
||||
config ARCH_SPARSEMEM_ENABLE
|
||||
bool
|
||||
|
||||
config ARCH_SPARSEMEM_ENABLE
|
||||
bool
|
||||
select SPARSEMEM_STATIC
|
||||
|
||||
config NUMA
|
||||
bool "NUMA Support"
|
||||
depends on SYS_SUPPORTS_NUMA
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
menu "Kernel hacking"
|
||||
|
||||
config TRACE_IRQFLAGS_SUPPORT
|
||||
bool
|
||||
default y
|
||||
|
||||
source "lib/Kconfig.debug"
|
||||
|
||||
config CROSSCOMPILE
|
||||
|
|
|
@ -712,16 +712,14 @@ endif
|
|||
vmlinux.bin: $(vmlinux-32)
|
||||
+@$(call makeboot,$@)
|
||||
|
||||
vmlinux.ecoff vmlinux.rm200: $(vmlinux-32)
|
||||
vmlinux.ecoff: $(vmlinux-32)
|
||||
+@$(call makeboot,$@)
|
||||
|
||||
vmlinux.srec: $(vmlinux-32)
|
||||
+@$(call makeboot,$@)
|
||||
|
||||
CLEAN_FILES += vmlinux.ecoff \
|
||||
vmlinux.srec \
|
||||
vmlinux.rm200.tmp \
|
||||
vmlinux.rm200
|
||||
vmlinux.srec
|
||||
|
||||
archclean:
|
||||
@$(MAKE) $(clean)=arch/mips/boot
|
||||
|
|
|
@ -251,7 +251,7 @@ void restore_local_and_enable(int controller, unsigned long mask)
|
|||
}
|
||||
|
||||
|
||||
static struct hw_interrupt_type rise_edge_irq_type = {
|
||||
static struct irq_chip rise_edge_irq_type = {
|
||||
.typename = "Au1000 Rise Edge",
|
||||
.startup = startup_irq,
|
||||
.shutdown = shutdown_irq,
|
||||
|
@ -261,7 +261,7 @@ static struct hw_interrupt_type rise_edge_irq_type = {
|
|||
.end = end_irq,
|
||||
};
|
||||
|
||||
static struct hw_interrupt_type fall_edge_irq_type = {
|
||||
static struct irq_chip fall_edge_irq_type = {
|
||||
.typename = "Au1000 Fall Edge",
|
||||
.startup = startup_irq,
|
||||
.shutdown = shutdown_irq,
|
||||
|
@ -271,7 +271,7 @@ static struct hw_interrupt_type fall_edge_irq_type = {
|
|||
.end = end_irq,
|
||||
};
|
||||
|
||||
static struct hw_interrupt_type either_edge_irq_type = {
|
||||
static struct irq_chip either_edge_irq_type = {
|
||||
.typename = "Au1000 Rise or Fall Edge",
|
||||
.startup = startup_irq,
|
||||
.shutdown = shutdown_irq,
|
||||
|
@ -281,7 +281,7 @@ static struct hw_interrupt_type either_edge_irq_type = {
|
|||
.end = end_irq,
|
||||
};
|
||||
|
||||
static struct hw_interrupt_type level_irq_type = {
|
||||
static struct irq_chip level_irq_type = {
|
||||
.typename = "Au1000 Level",
|
||||
.startup = startup_irq,
|
||||
.shutdown = shutdown_irq,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
*
|
||||
* BRIEF MODULE DESCRIPTION
|
||||
* PROM library initialisation code, assuming YAMON is the boot loader.
|
||||
* PROM library initialisation code, supports YAMON and U-Boot.
|
||||
*
|
||||
* Copyright 2000, 2001, 2006 MontaVista Software Inc.
|
||||
* Author: MontaVista Software, Inc.
|
||||
|
@ -46,12 +46,6 @@
|
|||
extern int prom_argc;
|
||||
extern char **prom_argv, **prom_envp;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *name;
|
||||
char *val;
|
||||
} t_env_var;
|
||||
|
||||
|
||||
char * prom_getcmdline(void)
|
||||
{
|
||||
|
@ -84,13 +78,21 @@ char *prom_getenv(char *envname)
|
|||
{
|
||||
/*
|
||||
* Return a pointer to the given environment variable.
|
||||
* YAMON uses "name", "value" pairs, while U-Boot uses "name=value".
|
||||
*/
|
||||
|
||||
t_env_var *env = (t_env_var *)prom_envp;
|
||||
char **env = prom_envp;
|
||||
int i = strlen(envname);
|
||||
int yamon = (*env && strchr(*env, '=') == NULL);
|
||||
|
||||
while (env->name) {
|
||||
if (strcmp(envname, env->name) == 0)
|
||||
return env->val;
|
||||
while (*env) {
|
||||
if (yamon) {
|
||||
if (strcmp(envname, *env++) == 0)
|
||||
return *env;
|
||||
} else {
|
||||
if (strncmp(envname, *env, i) == 0 && (*env)[i] == '=')
|
||||
return *env + i + 1;
|
||||
}
|
||||
env++;
|
||||
}
|
||||
return NULL;
|
||||
|
|
|
@ -51,7 +51,6 @@ extern void au1000_power_off(void);
|
|||
extern void au1x_time_init(void);
|
||||
extern void au1x_timer_setup(struct irqaction *irq);
|
||||
extern void au1xxx_time_init(void);
|
||||
extern void au1xxx_timer_setup(struct irqaction *irq);
|
||||
extern void set_cpuspec(void);
|
||||
|
||||
void __init plat_mem_setup(void)
|
||||
|
@ -123,7 +122,6 @@ void __init plat_mem_setup(void)
|
|||
_machine_halt = au1000_halt;
|
||||
pm_power_off = au1000_power_off;
|
||||
board_time_init = au1xxx_time_init;
|
||||
board_timer_setup = au1xxx_timer_setup;
|
||||
|
||||
/* IO/MEM resources. */
|
||||
set_io_port_base(0);
|
||||
|
|
|
@ -383,7 +383,7 @@ static unsigned long do_fast_pm_gettimeoffset(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
void __init au1xxx_timer_setup(struct irqaction *irq)
|
||||
void __init plat_timer_setup(struct irqaction *irq)
|
||||
{
|
||||
unsigned int est_freq;
|
||||
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#
|
||||
# Copyright 2002 Cogent Computer Systems
|
||||
# dan@embeddededge.com
|
||||
#
|
||||
# Makefile for the Cogent CSB250 Au1500 board. Copied from Pb1500.
|
||||
#
|
||||
|
||||
obj-y := init.o board_setup.o irqmap.o
|
|
@ -1,238 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* BRIEF MODULE DESCRIPTION
|
||||
* Cogent CSB250 board setup.
|
||||
*
|
||||
* Copyright 2002 Cogent Computer Systems, Inc.
|
||||
* dan@embeddededge.com
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/mc146818rtc.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/keyboard.h>
|
||||
#include <asm/mipsregs.h>
|
||||
#include <asm/reboot.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/au1000.h>
|
||||
#include <asm/csb250.h>
|
||||
|
||||
extern int (*board_pci_idsel)(unsigned int devsel, int assert);
|
||||
int csb250_pci_idsel(unsigned int devsel, int assert);
|
||||
|
||||
void __init board_setup(void)
|
||||
{
|
||||
u32 pin_func, pin_val;
|
||||
u32 sys_freqctrl, sys_clksrc;
|
||||
|
||||
|
||||
// set AUX clock to 12MHz * 8 = 96 MHz
|
||||
au_writel(8, SYS_AUXPLL);
|
||||
au_writel(0, SYS_PINSTATERD);
|
||||
udelay(100);
|
||||
|
||||
#if defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE)
|
||||
|
||||
/* GPIO201 is input for PCMCIA card detect */
|
||||
/* GPIO203 is input for PCMCIA interrupt request */
|
||||
au_writel(au_readl(GPIO2_DIR) & (u32)(~((1<<1)|(1<<3))), GPIO2_DIR);
|
||||
|
||||
/* zero and disable FREQ2 */
|
||||
sys_freqctrl = au_readl(SYS_FREQCTRL0);
|
||||
sys_freqctrl &= ~0xFFF00000;
|
||||
au_writel(sys_freqctrl, SYS_FREQCTRL0);
|
||||
|
||||
/* zero and disable USBH/USBD clocks */
|
||||
sys_clksrc = au_readl(SYS_CLKSRC);
|
||||
sys_clksrc &= ~0x00007FE0;
|
||||
au_writel(sys_clksrc, SYS_CLKSRC);
|
||||
|
||||
sys_freqctrl = au_readl(SYS_FREQCTRL0);
|
||||
sys_freqctrl &= ~0xFFF00000;
|
||||
|
||||
sys_clksrc = au_readl(SYS_CLKSRC);
|
||||
sys_clksrc &= ~0x00007FE0;
|
||||
|
||||
// FREQ2 = aux/2 = 48 MHz
|
||||
sys_freqctrl |= ((0<<22) | (1<<21) | (1<<20));
|
||||
au_writel(sys_freqctrl, SYS_FREQCTRL0);
|
||||
|
||||
/*
|
||||
* Route 48MHz FREQ2 into USB Host and/or Device
|
||||
*/
|
||||
#ifdef CONFIG_USB_OHCI
|
||||
sys_clksrc |= ((4<<12) | (0<<11) | (0<<10));
|
||||
#endif
|
||||
#ifdef CONFIG_AU1X00_USB_DEVICE
|
||||
sys_clksrc |= ((4<<7) | (0<<6) | (0<<5));
|
||||
#endif
|
||||
au_writel(sys_clksrc, SYS_CLKSRC);
|
||||
|
||||
|
||||
pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000);
|
||||
#ifndef CONFIG_AU1X00_USB_DEVICE
|
||||
// 2nd USB port is USB host
|
||||
pin_func |= 0x8000;
|
||||
#endif
|
||||
au_writel(pin_func, SYS_PINFUNC);
|
||||
#endif // defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE)
|
||||
|
||||
/* Configure GPIO2....it's used by PCI among other things.
|
||||
*/
|
||||
|
||||
/* Make everything but GP200 (PCI RST) an input until we get
|
||||
* the pins set correctly.
|
||||
*/
|
||||
au_writel(0x00000001, GPIO2_DIR);
|
||||
|
||||
/* Set the pins used for output.
|
||||
* A zero bit will leave PCI reset, LEDs off, power up USB,
|
||||
* IDSEL disabled.
|
||||
*/
|
||||
pin_val = ((3 << 30) | (7 << 19) | (1 << 17) | (1 << 16));
|
||||
au_writel(pin_val, GPIO2_OUTPUT);
|
||||
|
||||
/* Set the output direction.
|
||||
*/
|
||||
pin_val = ((3 << 14) | (7 << 3) | (1 << 1) | (1 << 0));
|
||||
au_writel(pin_val, GPIO2_DIR);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
/* Use FREQ1 for the PCI output clock. We use the
|
||||
* CPU clock of 384 MHz divided by 12 to get 32 MHz PCI.
|
||||
* If Michael changes the CPU speed, we need to adjust
|
||||
* that here as well :-).
|
||||
*/
|
||||
|
||||
/* zero and disable FREQ1
|
||||
*/
|
||||
sys_freqctrl = au_readl(SYS_FREQCTRL0);
|
||||
sys_freqctrl &= ~0x000ffc00;
|
||||
au_writel(sys_freqctrl, SYS_FREQCTRL0);
|
||||
|
||||
/* zero and disable PCI clock
|
||||
*/
|
||||
sys_clksrc = au_readl(SYS_CLKSRC);
|
||||
sys_clksrc &= ~0x000f8000;
|
||||
au_writel(sys_clksrc, SYS_CLKSRC);
|
||||
|
||||
/* Get current values (which really should match above).
|
||||
*/
|
||||
sys_freqctrl = au_readl(SYS_FREQCTRL0);
|
||||
sys_freqctrl &= ~0x000ffc00;
|
||||
|
||||
sys_clksrc = au_readl(SYS_CLKSRC);
|
||||
sys_clksrc &= ~0x000f8000;
|
||||
|
||||
/* FREQ1 = cpu/12 = 32 MHz
|
||||
*/
|
||||
sys_freqctrl |= ((5<<12) | (1<<11) | (0<<10));
|
||||
au_writel(sys_freqctrl, SYS_FREQCTRL0);
|
||||
|
||||
/* Just connect the clock without further dividing.
|
||||
*/
|
||||
sys_clksrc |= ((3<<17) | (0<<16) | (0<<15));
|
||||
au_writel(sys_clksrc, SYS_CLKSRC);
|
||||
|
||||
udelay(1);
|
||||
|
||||
/* Now that clocks should be running, take PCI out of reset.
|
||||
*/
|
||||
pin_val = au_readl(GPIO2_OUTPUT);
|
||||
pin_val |= ((1 << 16) | 1);
|
||||
au_writel(pin_val, GPIO2_OUTPUT);
|
||||
|
||||
// Setup PCI bus controller
|
||||
au_writel(0, Au1500_PCI_CMEM);
|
||||
au_writel(0x00003fff, Au1500_CFG_BASE);
|
||||
|
||||
/* We run big endian without any of the software byte swapping,
|
||||
* so configure the PCI bridge to help us out.
|
||||
*/
|
||||
au_writel(0xf | (2<<6) | (1<<5) | (1<<4), Au1500_PCI_CFG);
|
||||
|
||||
au_writel(0xf0000000, Au1500_PCI_MWMASK_DEV);
|
||||
au_writel(0, Au1500_PCI_MWBASE_REV_CCL);
|
||||
au_writel(0x02a00356, Au1500_PCI_STATCMD);
|
||||
au_writel(0x00003c04, Au1500_PCI_HDRTYPE);
|
||||
au_writel(0x00000008, Au1500_PCI_MBAR);
|
||||
au_sync();
|
||||
|
||||
board_pci_idsel = csb250_pci_idsel;
|
||||
#endif
|
||||
|
||||
/* Enable sys bus clock divider when IDLE state or no bus activity. */
|
||||
au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL);
|
||||
|
||||
#ifdef CONFIG_RTC
|
||||
// Enable the RTC if not already enabled
|
||||
if (!(au_readl(0xac000028) & 0x20)) {
|
||||
printk("enabling clock ...\n");
|
||||
au_writel((au_readl(0xac000028) | 0x20), 0xac000028);
|
||||
}
|
||||
// Put the clock in BCD mode
|
||||
if (readl(0xac00002C) & 0x4) { /* reg B */
|
||||
au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c);
|
||||
au_sync();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* The IDSEL is selected in the GPIO2 register. We will make device
|
||||
* 12 appear in slot 0 and device 13 appear in slot 1.
|
||||
*/
|
||||
int
|
||||
csb250_pci_idsel(unsigned int devsel, int assert)
|
||||
{
|
||||
int retval;
|
||||
unsigned int gpio2_pins;
|
||||
|
||||
retval = 1;
|
||||
|
||||
/* First, disable both selects, then assert the one requested.
|
||||
*/
|
||||
au_writel(0xc000c000, GPIO2_OUTPUT);
|
||||
au_sync();
|
||||
|
||||
if (assert) {
|
||||
if (devsel == 12)
|
||||
gpio2_pins = 0x40000000;
|
||||
else if (devsel == 13)
|
||||
gpio2_pins = 0x80000000;
|
||||
else {
|
||||
gpio2_pins = 0xc000c000;
|
||||
retval = 0;
|
||||
}
|
||||
au_writel(gpio2_pins, GPIO2_OUTPUT);
|
||||
}
|
||||
au_sync();
|
||||
|
||||
return retval;
|
||||
}
|
|
@ -1,94 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* BRIEF MODULE DESCRIPTION
|
||||
* Cogent CSB250 board setup
|
||||
*
|
||||
* Copyright 2002 Cogent Computer Systems, Inc.
|
||||
* dan@embeddededge.com
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
int prom_argc;
|
||||
char **prom_argv, **prom_envp;
|
||||
extern void __init prom_init_cmdline(void);
|
||||
extern char *prom_getenv(char *envname);
|
||||
|
||||
/* When we get initrd working someday.........
|
||||
*/
|
||||
int my_initrd_start, my_initrd_size;
|
||||
|
||||
/* Start arguments and environment.
|
||||
*/
|
||||
static char *csb_env[2];
|
||||
static char *csb_arg[4];
|
||||
static char *arg1 = "console=ttyS3,38400";
|
||||
static char *arg2 = "root=/dev/nfs rw ip=any";
|
||||
static char *env1 = "ethaddr=00:30:23:50:00:00";
|
||||
|
||||
const char *get_system_type(void)
|
||||
{
|
||||
return "Cogent CSB250";
|
||||
}
|
||||
|
||||
int __init prom_init(int argc, char **argv, char **envp, int *prom_vec)
|
||||
{
|
||||
unsigned char *memsize_str;
|
||||
unsigned long memsize;
|
||||
|
||||
/* We use a0 and a1 to pass initrd start and size.
|
||||
*/
|
||||
if (((unsigned int) argc > 0) && ((uint)argv > 0)) {
|
||||
my_initrd_start = (unsigned int)argc;
|
||||
my_initrd_size = (unsigned int)argv;
|
||||
}
|
||||
|
||||
/* First argv is ignored.
|
||||
*/
|
||||
prom_argc = 3;
|
||||
prom_argv = csb_arg;
|
||||
prom_envp = csb_env;
|
||||
csb_arg[1] = arg1;
|
||||
csb_arg[2] = arg2;
|
||||
csb_env[0] = env1;
|
||||
|
||||
mips_machgroup = MACH_GROUP_ALCHEMY;
|
||||
mips_machtype = MACH_CSB250;
|
||||
|
||||
prom_init_cmdline();
|
||||
memsize_str = prom_getenv("memsize");
|
||||
if (!memsize_str) {
|
||||
memsize = 0x02000000;
|
||||
} else {
|
||||
memsize = simple_strtol(memsize_str, NULL, 0);
|
||||
}
|
||||
add_memory_region(0, memsize, BOOT_MEM_RAM);
|
||||
return 0;
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
/*
|
||||
* BRIEF MODULE DESCRIPTION
|
||||
* Au1xxx irq map table
|
||||
*
|
||||
* Copyright 2003 Embedded Edge, LLC
|
||||
* dan@embeddededge.com
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/random.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/mipsregs.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/au1000.h>
|
||||
|
||||
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||
|
||||
{ AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0},
|
||||
{ AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 },
|
||||
{ AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 },
|
||||
{ AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 },
|
||||
{ AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 },
|
||||
{ AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 },
|
||||
};
|
||||
|
||||
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
|
@ -1,9 +0,0 @@
|
|||
#
|
||||
# Copyright 2000 MontaVista Software Inc.
|
||||
# Author: MontaVista Software, Inc.
|
||||
# ppopov@mvista.com or source@mvista.com
|
||||
#
|
||||
# Makefile for the Alchemy Semiconductor PB1000 board.
|
||||
#
|
||||
|
||||
obj-y := init.o board_setup.o irqmap.o
|
|
@ -1,69 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* BRIEF MODULE DESCRIPTION
|
||||
* Alchemy Db1x00 board setup.
|
||||
*
|
||||
* Copyright 2000 MontaVista Software Inc.
|
||||
* Author: MontaVista Software, Inc.
|
||||
* ppopov@mvista.com or source@mvista.com
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/mc146818rtc.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/keyboard.h>
|
||||
#include <asm/mipsregs.h>
|
||||
#include <asm/reboot.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/au1000.h>
|
||||
|
||||
void board_reset (void)
|
||||
{
|
||||
}
|
||||
|
||||
void __init board_setup(void)
|
||||
{
|
||||
u32 pin_func;
|
||||
|
||||
#ifdef CONFIG_AU1X00_USB_DEVICE
|
||||
// 2nd USB port is USB device
|
||||
pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000);
|
||||
au_writel(pin_func, SYS_PINFUNC);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_IRDA) && (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100))
|
||||
/* set IRFIRSEL instead of GPIO15 */
|
||||
pin_func = au_readl(SYS_PINFUNC) | (u32)((1<<8));
|
||||
au_writel(pin_func, SYS_PINFUNC);
|
||||
au_sync();
|
||||
#endif
|
||||
|
||||
printk("AMD Alchemy Hydrogen3 Board\n");
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* BRIEF MODULE DESCRIPTION
|
||||
* PB1000 board setup
|
||||
*
|
||||
* Copyright 2001 MontaVista Software Inc.
|
||||
* Author: MontaVista Software, Inc.
|
||||
* ppopov@mvista.com or source@mvista.com
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
int prom_argc;
|
||||
char **prom_argv, **prom_envp;
|
||||
extern void __init prom_init_cmdline(void);
|
||||
extern char *prom_getenv(char *envname);
|
||||
|
||||
const char *get_system_type(void)
|
||||
{
|
||||
#ifdef CONFIG_MIPS_BOSPORUS
|
||||
return "Alchemy Bosporus Gateway Reference";
|
||||
#else
|
||||
return "Alchemy Db1x00";
|
||||
#endif
|
||||
}
|
||||
|
||||
int __init prom_init(int argc, char **argv, char **envp, int *prom_vec)
|
||||
{
|
||||
unsigned char *memsize_str;
|
||||
unsigned long memsize;
|
||||
|
||||
prom_argc = argc;
|
||||
prom_argv = argv;
|
||||
prom_envp = envp;
|
||||
|
||||
mips_machgroup = MACH_GROUP_ALCHEMY;
|
||||
mips_machtype = MACH_DB1000; /* set the platform # */
|
||||
prom_init_cmdline();
|
||||
|
||||
memsize_str = prom_getenv("memsize");
|
||||
if (!memsize_str) {
|
||||
memsize = 0x04000000;
|
||||
} else {
|
||||
memsize = simple_strtol(memsize_str, NULL, 0);
|
||||
}
|
||||
add_memory_region(0, memsize, BOOT_MEM_RAM);
|
||||
return 0;
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
/*
|
||||
* BRIEF MODULE DESCRIPTION
|
||||
* Au1xxx irq map table
|
||||
*
|
||||
* Copyright 2003 Embedded Edge, LLC
|
||||
* dan@embeddededge.com
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/random.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/mipsregs.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/au1000.h>
|
||||
|
||||
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||
|
||||
/* { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, */
|
||||
{ AU1000_GPIO_21, INTC_INT_LOW_LEVEL, 0 },
|
||||
};
|
||||
|
||||
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
|
@ -148,7 +148,7 @@ static void pb1200_end_irq(unsigned int irq_nr)
|
|||
}
|
||||
}
|
||||
|
||||
static struct hw_interrupt_type external_irq_type =
|
||||
static struct irq_chip external_irq_type =
|
||||
{
|
||||
#ifdef CONFIG_MIPS_PB1200
|
||||
"Pb1200 Ext",
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/stat.h>
|
||||
#include <asm/page.h>
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/mm.h>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -79,7 +78,7 @@ static void excite_timer_init(void)
|
|||
mips_hpt_frequency = EXCITE_CPU_EXT_CLOCK * mult / div / 2;
|
||||
}
|
||||
|
||||
static void excite_timer_setup(struct irqaction *irq)
|
||||
void __init plat_timer_setup(struct irqaction *irq)
|
||||
{
|
||||
/* The eXcite platform uses the alternate timer interrupt */
|
||||
set_c0_intcontrol(0x80);
|
||||
|
@ -263,7 +262,6 @@ void __init plat_mem_setup(void)
|
|||
|
||||
/* Set up timer initialization hooks */
|
||||
board_time_init = excite_timer_init;
|
||||
board_timer_setup = excite_timer_setup;
|
||||
|
||||
/* Set up the peripheral address map */
|
||||
*(boot_ocd_base + (LKB9 / sizeof (u32))) = 0;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue