projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
[powerpc.git]
/
drivers
/
char
/
vt.c
diff --git
a/drivers/char/vt.c
b/drivers/char/vt.c
index
0fca83e
..
75ff028
100644
(file)
--- a/
drivers/char/vt.c
+++ b/
drivers/char/vt.c
@@
-106,12
+106,13
@@
#define MAX_NR_CON_DRIVER 16
#define CON_DRIVER_FLAG_MODULE 1
#define MAX_NR_CON_DRIVER 16
#define CON_DRIVER_FLAG_MODULE 1
-#define CON_DRIVER_FLAG_INIT 2
+#define CON_DRIVER_FLAG_INIT 2
+#define CON_DRIVER_FLAG_ATTR 4
struct con_driver {
const struct consw *con;
const char *desc;
struct con_driver {
const struct consw *con;
const char *desc;
- struct
class_device *class_
dev;
+ struct
device *
dev;
int node;
int first;
int last;
int node;
int first;
int last;
@@
-138,14
+139,6
@@
const struct consw *conswitchp;
extern void vcs_make_sysfs(struct tty_struct *tty);
extern void vcs_remove_sysfs(struct tty_struct *tty);
extern void vcs_make_sysfs(struct tty_struct *tty);
extern void vcs_remove_sysfs(struct tty_struct *tty);
-extern void console_map_init(void);
-#ifdef CONFIG_PROM_CONSOLE
-extern void prom_con_init(void);
-#endif
-#ifdef CONFIG_MDA_CONSOLE
-extern int mda_console_init(void);
-#endif
-
struct vc vc_cons [MAX_NR_CONSOLES];
#ifndef VT_SINGLE_DRIVER
struct vc vc_cons [MAX_NR_CONSOLES];
#ifndef VT_SINGLE_DRIVER
@@
-162,7
+155,7
@@
static void con_flush_chars(struct tty_struct *tty);
static void set_vesa_blanking(char __user *p);
static void set_cursor(struct vc_data *vc);
static void hide_cursor(struct vc_data *vc);
static void set_vesa_blanking(char __user *p);
static void set_cursor(struct vc_data *vc);
static void hide_cursor(struct vc_data *vc);
-static void console_callback(
void
*ignored);
+static void console_callback(
struct work_struct
*ignored);
static void blank_screen_t(unsigned long dummy);
static void set_palette(struct vc_data *vc);
static void blank_screen_t(unsigned long dummy);
static void set_palette(struct vc_data *vc);
@@
-181,7
+174,7
@@
static int vesa_blank_mode; /* 0:none 1:suspendV 2:suspendH 3:powerdown */
static int blankinterval = 10*60*HZ;
static int vesa_off_interval;
static int blankinterval = 10*60*HZ;
static int vesa_off_interval;
-static DECLARE_WORK(console_work, console_callback
, NULL
);
+static DECLARE_WORK(console_work, console_callback);
/*
* fg_console is the current virtual console,
/*
* fg_console is the current virtual console,
@@
-737,7
+730,8
@@
int vc_allocate(unsigned int currcons) /* return 0 on success */
visual_init(vc, currcons, 1);
if (!*vc->vc_uni_pagedir_loc)
con_set_default_unimap(vc);
visual_init(vc, currcons, 1);
if (!*vc->vc_uni_pagedir_loc)
con_set_default_unimap(vc);
- vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL);
+ if (!vc->vc_kmalloced)
+ vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL);
if (!vc->vc_screenbuf) {
kfree(vc);
vc_cons[currcons].d = NULL;
if (!vc->vc_screenbuf) {
kfree(vc);
vc_cons[currcons].d = NULL;
@@
-885,14
+879,24
@@
int vc_resize(struct vc_data *vc, unsigned int cols, unsigned int lines)
return err;
}
return err;
}
+int vc_lock_resize(struct vc_data *vc, unsigned int cols, unsigned int lines)
+{
+ int rc;
-void vc_disallocate(unsigned int currcons)
+ acquire_console_sem();
+ rc = vc_resize(vc, cols, lines);
+ release_console_sem();
+ return rc;
+}
+
+void vc_deallocate(unsigned int currcons)
{
WARN_CONSOLE_UNLOCKED();
if (vc_cons_allocated(currcons)) {
struct vc_data *vc = vc_cons[currcons].d;
vc->vc_sw->con_deinit(vc);
{
WARN_CONSOLE_UNLOCKED();
if (vc_cons_allocated(currcons)) {
struct vc_data *vc = vc_cons[currcons].d;
vc->vc_sw->con_deinit(vc);
+ put_pid(vc->vt_pid);
module_put(vc->vc_sw->owner);
if (vc->vc_kmalloced)
kfree(vc->vc_screenbuf);
module_put(vc->vc_sw->owner);
if (vc->vc_kmalloced)
kfree(vc->vc_screenbuf);
@@
-2150,7
+2154,7
@@
out:
* with other console code and prevention of re-entrancy is
* ensured with console_sem.
*/
* with other console code and prevention of re-entrancy is
* ensured with console_sem.
*/
-static void console_callback(
void
*ignored)
+static void console_callback(
struct work_struct
*ignored)
{
acquire_console_sem();
{
acquire_console_sem();
@@
-2664,7
+2668,7
@@
static int __init con_init(void)
}
console_initcall(con_init);
}
console_initcall(con_init);
-static struct tty_operations con_ops = {
+static
const
struct tty_operations con_ops = {
.open = con_open,
.close = con_close,
.write = con_write,
.open = con_open,
.close = con_close,
.write = con_write,
@@
-3019,10
+3023,10
@@
static inline int vt_unbind(struct con_driver *con)
}
#endif /* CONFIG_VT_HW_CONSOLE_BINDING */
}
#endif /* CONFIG_VT_HW_CONSOLE_BINDING */
-static ssize_t store_bind(struct
class_device *class_device
,
+static ssize_t store_bind(struct
device *dev, struct device_attribute *attr
,
const char *buf, size_t count)
{
const char *buf, size_t count)
{
- struct con_driver *con =
class_get_devdata(class_device
);
+ struct con_driver *con =
dev_get_drvdata(dev
);
int bind = simple_strtoul(buf, NULL, 0);
if (bind)
int bind = simple_strtoul(buf, NULL, 0);
if (bind)
@@
-3033,17
+3037,19
@@
static ssize_t store_bind(struct class_device *class_device,
return count;
}
return count;
}
-static ssize_t show_bind(struct class_device *class_device, char *buf)
+static ssize_t show_bind(struct device *dev, struct device_attribute *attr,
+ char *buf)
{
{
- struct con_driver *con =
class_get_devdata(class_device
);
+ struct con_driver *con =
dev_get_drvdata(dev
);
int bind = con_is_bound(con->con);
return snprintf(buf, PAGE_SIZE, "%i\n", bind);
}
int bind = con_is_bound(con->con);
return snprintf(buf, PAGE_SIZE, "%i\n", bind);
}
-static ssize_t show_name(struct class_device *class_device, char *buf)
+static ssize_t show_name(struct device *dev, struct device_attribute *attr,
+ char *buf)
{
{
- struct con_driver *con =
class_get_devdata(class_device
);
+ struct con_driver *con =
dev_get_drvdata(dev
);
return snprintf(buf, PAGE_SIZE, "%s %s\n",
(con->flag & CON_DRIVER_FLAG_MODULE) ? "(M)" : "(S)",
return snprintf(buf, PAGE_SIZE, "%s %s\n",
(con->flag & CON_DRIVER_FLAG_MODULE) ? "(M)" : "(S)",
@@
-3051,30
+3057,42
@@
static ssize_t show_name(struct class_device *class_device, char *buf)
}
}
-static struct
class_device_attribute class_
device_attrs[] = {
+static struct
device_attribute
device_attrs[] = {
__ATTR(bind, S_IRUGO|S_IWUSR, show_bind, store_bind),
__ATTR(name, S_IRUGO, show_name, NULL),
};
__ATTR(bind, S_IRUGO|S_IWUSR, show_bind, store_bind),
__ATTR(name, S_IRUGO, show_name, NULL),
};
-static int vtconsole_init_
class_
device(struct con_driver *con)
+static int vtconsole_init_device(struct con_driver *con)
{
int i;
{
int i;
+ int error = 0;
- class_set_devdata(con->class_dev, con);
- for (i = 0; i < ARRAY_SIZE(class_device_attrs); i++)
- class_device_create_file(con->class_dev,
- &class_device_attrs[i]);
+ con->flag |= CON_DRIVER_FLAG_ATTR;
+ dev_set_drvdata(con->dev, con);
+ for (i = 0; i < ARRAY_SIZE(device_attrs); i++) {
+ error = device_create_file(con->dev, &device_attrs[i]);
+ if (error)
+ break;
+ }
- return 0;
+ if (error) {
+ while (--i >= 0)
+ device_remove_file(con->dev, &device_attrs[i]);
+ con->flag &= ~CON_DRIVER_FLAG_ATTR;
+ }
+
+ return error;
}
}
-static void vtconsole_deinit_
class_
device(struct con_driver *con)
+static void vtconsole_deinit_device(struct con_driver *con)
{
int i;
{
int i;
- for (i = 0; i < ARRAY_SIZE(class_device_attrs); i++)
- class_device_remove_file(con->class_dev,
- &class_device_attrs[i]);
+ if (con->flag & CON_DRIVER_FLAG_ATTR) {
+ for (i = 0; i < ARRAY_SIZE(device_attrs); i++)
+ device_remove_file(con->dev, &device_attrs[i]);
+ con->flag &= ~CON_DRIVER_FLAG_ATTR;
+ }
}
/**
}
/**
@@
-3160,19
+3178,19
@@
int register_con_driver(const struct consw *csw, int first, int last)
if (retval)
goto err;
if (retval)
goto err;
- con_driver->class_dev = class_device_create(vtconsole_class, NULL,
- MKDEV(0, con_driver->node),
- NULL, "vtcon%i",
- con_driver->node);
+ con_driver->dev = device_create(vtconsole_class, NULL,
+ MKDEV(0, con_driver->node),
+ "vtcon%i", con_driver->node);
- if (IS_ERR(con_driver->
class_
dev)) {
- printk(KERN_WARNING "Unable to create
class_
device for %s; "
+ if (IS_ERR(con_driver->dev)) {
+ printk(KERN_WARNING "Unable to create device for %s; "
"errno = %ld\n", con_driver->desc,
"errno = %ld\n", con_driver->desc,
- PTR_ERR(con_driver->
class_
dev));
- con_driver->
class_
dev = NULL;
+ PTR_ERR(con_driver->dev));
+ con_driver->dev = NULL;
} else {
} else {
- vtconsole_init_
class_
device(con_driver);
+ vtconsole_init_device(con_driver);
}
}
+
err:
release_console_sem();
module_put(owner);
err:
release_console_sem();
module_put(owner);
@@
-3206,12
+3224,12
@@
int unregister_con_driver(const struct consw *csw)
if (con_driver->con == csw &&
con_driver->flag & CON_DRIVER_FLAG_MODULE) {
if (con_driver->con == csw &&
con_driver->flag & CON_DRIVER_FLAG_MODULE) {
- vtconsole_deinit_
class_
device(con_driver);
-
class_
device_destroy(vtconsole_class,
-
MKDEV(0, con_driver->node));
+ vtconsole_deinit_device(con_driver);
+ device_destroy(vtconsole_class,
+ MKDEV(0, con_driver->node));
con_driver->con = NULL;
con_driver->desc = NULL;
con_driver->con = NULL;
con_driver->desc = NULL;
- con_driver->
class_
dev = NULL;
+ con_driver->dev = NULL;
con_driver->node = 0;
con_driver->flag = 0;
con_driver->first = 0;
con_driver->node = 0;
con_driver->flag = 0;
con_driver->first = 0;
@@
-3269,19
+3287,18
@@
static int __init vtconsole_class_init(void)
for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
struct con_driver *con = ®istered_con_driver[i];
for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
struct con_driver *con = ®istered_con_driver[i];
- if (con->con && !con->class_dev) {
- con->class_dev =
- class_device_create(vtconsole_class, NULL,
- MKDEV(0, con->node), NULL,
- "vtcon%i", con->node);
+ if (con->con && !con->dev) {
+ con->dev = device_create(vtconsole_class, NULL,
+ MKDEV(0, con->node),
+ "vtcon%i", con->node);
- if (IS_ERR(con->
class_
dev)) {
+ if (IS_ERR(con->dev)) {
printk(KERN_WARNING "Unable to create "
printk(KERN_WARNING "Unable to create "
- "
class_
device for %s; errno = %ld\n",
- con->desc, PTR_ERR(con->
class_
dev));
- con->
class_
dev = NULL;
+ "device for %s; errno = %ld\n",
+ con->desc, PTR_ERR(con->dev));
+ con->dev = NULL;
} else {
} else {
- vtconsole_init_
class_
device(con);
+ vtconsole_init_device(con);
}
}
}
}
}
}
@@
-3790,6
+3807,7
@@
EXPORT_SYMBOL(default_blu);
EXPORT_SYMBOL(update_region);
EXPORT_SYMBOL(redraw_screen);
EXPORT_SYMBOL(vc_resize);
EXPORT_SYMBOL(update_region);
EXPORT_SYMBOL(redraw_screen);
EXPORT_SYMBOL(vc_resize);
+EXPORT_SYMBOL(vc_lock_resize);
EXPORT_SYMBOL(fg_console);
EXPORT_SYMBOL(console_blank_hook);
EXPORT_SYMBOL(console_blanked);
EXPORT_SYMBOL(fg_console);
EXPORT_SYMBOL(console_blank_hook);
EXPORT_SYMBOL(console_blanked);