Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
4684fe01c7
139 changed files with 2941 additions and 880 deletions
|
@ -2629,8 +2629,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
aux-ide-disks -- unplug non-primary-master IDE devices
|
||||
nics -- unplug network devices
|
||||
all -- unplug all emulated devices (NICs and IDE disks)
|
||||
ignore -- continue loading the Xen platform PCI driver even
|
||||
if the version check failed
|
||||
unnecessary -- unplugging emulated devices is
|
||||
unnecessary even if the host did not respond to
|
||||
the unplug protocol
|
||||
never -- do not unplug even if version check succeeds
|
||||
|
||||
xirc2ps_cs= [NET,PCMCIA]
|
||||
Format:
|
||||
|
|
11
MAINTAINERS
11
MAINTAINERS
|
@ -454,6 +454,17 @@ L: linux-rdma@vger.kernel.org
|
|||
S: Maintained
|
||||
F: drivers/infiniband/hw/amso1100/
|
||||
|
||||
ANALOG DEVICES INC ASOC DRIVERS
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
W: http://blackfin.uclinux.org/
|
||||
S: Supported
|
||||
F: sound/soc/blackfin/*
|
||||
F: sound/soc/codecs/ad1*
|
||||
F: sound/soc/codecs/adau*
|
||||
F: sound/soc/codecs/adav*
|
||||
F: sound/soc/codecs/ssm*
|
||||
|
||||
AOA (Apple Onboard Audio) ALSA DRIVER
|
||||
M: Johannes Berg <johannes@sipsolutions.net>
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
|
|
4
Makefile
4
Makefile
|
@ -1408,8 +1408,8 @@ checkstack:
|
|||
$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
|
||||
$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
||||
|
||||
kernelrelease: include/config/kernel.release
|
||||
@echo $(KERNELRELEASE)
|
||||
kernelrelease:
|
||||
@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
|
||||
|
||||
kernelversion:
|
||||
@echo $(KERNELVERSION)
|
||||
|
|
|
@ -22,7 +22,9 @@
|
|||
|
||||
#include <asm-generic/bitops/sched.h>
|
||||
#include <asm-generic/bitops/ffs.h>
|
||||
#include <asm-generic/bitops/const_hweight.h>
|
||||
#include <asm-generic/bitops/lock.h>
|
||||
|
||||
#include <asm-generic/bitops/ext2-non-atomic.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
@ -115,7 +117,7 @@ static inline int test_and_change_bit(int nr, volatile unsigned long *addr)
|
|||
* of bits set) of a N-bit word
|
||||
*/
|
||||
|
||||
static inline unsigned int hweight32(unsigned int w)
|
||||
static inline unsigned int __arch_hweight32(unsigned int w)
|
||||
{
|
||||
unsigned int res;
|
||||
|
||||
|
@ -125,19 +127,20 @@ static inline unsigned int hweight32(unsigned int w)
|
|||
return res;
|
||||
}
|
||||
|
||||
static inline unsigned int hweight64(__u64 w)
|
||||
static inline unsigned int __arch_hweight64(__u64 w)
|
||||
{
|
||||
return hweight32((unsigned int)(w >> 32)) + hweight32((unsigned int)w);
|
||||
return __arch_hweight32((unsigned int)(w >> 32)) +
|
||||
__arch_hweight32((unsigned int)w);
|
||||
}
|
||||
|
||||
static inline unsigned int hweight16(unsigned int w)
|
||||
static inline unsigned int __arch_hweight16(unsigned int w)
|
||||
{
|
||||
return hweight32(w & 0xffff);
|
||||
return __arch_hweight32(w & 0xffff);
|
||||
}
|
||||
|
||||
static inline unsigned int hweight8(unsigned int w)
|
||||
static inline unsigned int __arch_hweight8(unsigned int w)
|
||||
{
|
||||
return hweight32(w & 0xff);
|
||||
return __arch_hweight32(w & 0xff);
|
||||
}
|
||||
|
||||
#endif /* _BLACKFIN_BITOPS_H */
|
||||
|
|
|
@ -389,8 +389,11 @@
|
|||
#define __NR_rt_tgsigqueueinfo 368
|
||||
#define __NR_perf_event_open 369
|
||||
#define __NR_recvmmsg 370
|
||||
#define __NR_fanotify_init 371
|
||||
#define __NR_fanotify_mark 372
|
||||
#define __NR_prlimit64 373
|
||||
|
||||
#define __NR_syscall 371
|
||||
#define __NR_syscall 374
|
||||
#define NR_syscalls __NR_syscall
|
||||
|
||||
/* Old optional stuff no one actually uses */
|
||||
|
|
|
@ -1628,6 +1628,9 @@ ENTRY(_sys_call_table)
|
|||
.long _sys_rt_tgsigqueueinfo
|
||||
.long _sys_perf_event_open
|
||||
.long _sys_recvmmsg /* 370 */
|
||||
.long _sys_fanotify_init
|
||||
.long _sys_fanotify_mark
|
||||
.long _sys_prlimit64
|
||||
|
||||
.rept NR_syscalls-(.-_sys_call_table)/4
|
||||
.long _sys_ni_syscall
|
||||
|
|
|
@ -25,7 +25,8 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
|
|||
unsigned long addr;
|
||||
void *ret;
|
||||
|
||||
printk("dma_alloc_coherent(%s,%zu,,%x)\n", dev_name(dev), size, gfp);
|
||||
pr_debug("dma_alloc_coherent(%s,%zu,%x)\n",
|
||||
dev ? dev_name(dev) : "?", size, gfp);
|
||||
|
||||
if (0xbe000000 - pci_sram_allocated >= size) {
|
||||
size = (size + 255) & ~255;
|
||||
|
|
|
@ -72,13 +72,17 @@ void __init xen_unplug_emulated_devices(void)
|
|||
{
|
||||
int r;
|
||||
|
||||
/* user explicitly requested no unplug */
|
||||
if (xen_emul_unplug & XEN_UNPLUG_NEVER)
|
||||
return;
|
||||
/* check the version of the xen platform PCI device */
|
||||
r = check_platform_magic();
|
||||
/* If the version matches enable the Xen platform PCI driver.
|
||||
* Also enable the Xen platform PCI driver if the version is really old
|
||||
* and the user told us to ignore it. */
|
||||
* Also enable the Xen platform PCI driver if the host does
|
||||
* not support the unplug protocol (XEN_PLATFORM_ERR_MAGIC)
|
||||
* but the user told us that unplugging is unnecessary. */
|
||||
if (r && !(r == XEN_PLATFORM_ERR_MAGIC &&
|
||||
(xen_emul_unplug & XEN_UNPLUG_IGNORE)))
|
||||
(xen_emul_unplug & XEN_UNPLUG_UNNECESSARY)))
|
||||
return;
|
||||
/* Set the default value of xen_emul_unplug depending on whether or
|
||||
* not the Xen PV frontends and the Xen platform PCI driver have
|
||||
|
@ -99,7 +103,7 @@ void __init xen_unplug_emulated_devices(void)
|
|||
}
|
||||
}
|
||||
/* Now unplug the emulated devices */
|
||||
if (!(xen_emul_unplug & XEN_UNPLUG_IGNORE))
|
||||
if (!(xen_emul_unplug & XEN_UNPLUG_UNNECESSARY))
|
||||
outw(xen_emul_unplug, XEN_IOPORT_UNPLUG);
|
||||
xen_platform_pci_unplug = xen_emul_unplug;
|
||||
}
|
||||
|
@ -125,8 +129,10 @@ static int __init parse_xen_emul_unplug(char *arg)
|
|||
xen_emul_unplug |= XEN_UNPLUG_AUX_IDE_DISKS;
|
||||
else if (!strncmp(p, "nics", l))
|
||||
xen_emul_unplug |= XEN_UNPLUG_ALL_NICS;
|
||||
else if (!strncmp(p, "ignore", l))
|
||||
xen_emul_unplug |= XEN_UNPLUG_IGNORE;
|
||||
else if (!strncmp(p, "unnecessary", l))
|
||||
xen_emul_unplug |= XEN_UNPLUG_UNNECESSARY;
|
||||
else if (!strncmp(p, "never", l))
|
||||
xen_emul_unplug |= XEN_UNPLUG_NEVER;
|
||||
else
|
||||
printk(KERN_WARNING "unrecognised option '%s' "
|
||||
"in parameter 'xen_emul_unplug'\n", p);
|
||||
|
|
|
@ -834,7 +834,7 @@ static int blkfront_probe(struct xenbus_device *dev,
|
|||
char *type;
|
||||
int len;
|
||||
/* no unplug has been done: do not hook devices != xen vbds */
|
||||
if (xen_platform_pci_unplug & XEN_UNPLUG_IGNORE) {
|
||||
if (xen_platform_pci_unplug & XEN_UNPLUG_UNNECESSARY) {
|
||||
int major;
|
||||
|
||||
if (!VDEV_IS_EXTENDED(vdevice))
|
||||
|
|
|
@ -55,6 +55,9 @@
|
|||
static int drm_version(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv);
|
||||
|
||||
#define DRM_IOCTL_DEF(ioctl, _func, _flags) \
|
||||
[DRM_IOCTL_NR(ioctl)] = {.cmd = ioctl, .func = _func, .flags = _flags, .cmd_drv = 0}
|
||||
|
||||
/** Ioctl table */
|
||||
static struct drm_ioctl_desc drm_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, 0),
|
||||
|
@ -421,6 +424,7 @@ long drm_ioctl(struct file *filp,
|
|||
int retcode = -EINVAL;
|
||||
char stack_kdata[128];
|
||||
char *kdata = NULL;
|
||||
unsigned int usize, asize;
|
||||
|
||||
dev = file_priv->minor->dev;
|
||||
atomic_inc(&dev->ioctl_count);
|
||||
|
@ -436,11 +440,18 @@ long drm_ioctl(struct file *filp,
|
|||
((nr < DRM_COMMAND_BASE) || (nr >= DRM_COMMAND_END)))
|
||||
goto err_i1;
|
||||
if ((nr >= DRM_COMMAND_BASE) && (nr < DRM_COMMAND_END) &&
|
||||
(nr < DRM_COMMAND_BASE + dev->driver->num_ioctls))
|
||||
(nr < DRM_COMMAND_BASE + dev->driver->num_ioctls)) {
|
||||
u32 drv_size;
|
||||
ioctl = &dev->driver->ioctls[nr - DRM_COMMAND_BASE];
|
||||
drv_size = _IOC_SIZE(ioctl->cmd_drv);
|
||||
usize = asize = _IOC_SIZE(cmd);
|
||||
if (drv_size > asize)
|
||||
asize = drv_size;
|
||||
}
|
||||
else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) {
|
||||
ioctl = &drm_ioctls[nr];
|
||||
cmd = ioctl->cmd;
|
||||
usize = asize = _IOC_SIZE(cmd);
|
||||
} else
|
||||
goto err_i1;
|
||||
|
||||
|
@ -460,10 +471,10 @@ long drm_ioctl(struct file *filp,
|
|||
retcode = -EACCES;
|
||||
} else {
|
||||
if (cmd & (IOC_IN | IOC_OUT)) {
|
||||
if (_IOC_SIZE(cmd) <= sizeof(stack_kdata)) {
|
||||
if (asize <= sizeof(stack_kdata)) {
|
||||
kdata = stack_kdata;
|
||||
} else {
|
||||
kdata = kmalloc(_IOC_SIZE(cmd), GFP_KERNEL);
|
||||
kdata = kmalloc(asize, GFP_KERNEL);
|
||||
if (!kdata) {
|
||||
retcode = -ENOMEM;
|
||||
goto err_i1;
|
||||
|
@ -473,11 +484,13 @@ long drm_ioctl(struct file *filp,
|
|||
|
||||
if (cmd & IOC_IN) {
|
||||
if (copy_from_user(kdata, (void __user *)arg,
|
||||
_IOC_SIZE(cmd)) != 0) {
|
||||
usize) != 0) {
|
||||
retcode = -EFAULT;
|
||||
goto err_i1;
|
||||
}
|
||||
}
|
||||
} else
|
||||
memset(kdata, 0, usize);
|
||||
|
||||
if (ioctl->flags & DRM_UNLOCKED)
|
||||
retcode = func(dev, kdata, file_priv);
|
||||
else {
|
||||
|
@ -488,7 +501,7 @@ long drm_ioctl(struct file *filp,
|
|||
|
||||
if (cmd & IOC_OUT) {
|
||||
if (copy_to_user((void __user *)arg, kdata,
|
||||
_IOC_SIZE(cmd)) != 0)
|
||||
usize) != 0)
|
||||
retcode = -EFAULT;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -94,10 +94,11 @@ static bool drm_fb_helper_connector_parse_command_line(struct drm_fb_helper_conn
|
|||
int i;
|
||||
enum drm_connector_force force = DRM_FORCE_UNSPECIFIED;
|
||||
struct drm_fb_helper_cmdline_mode *cmdline_mode;
|
||||
struct drm_connector *connector = fb_helper_conn->connector;
|
||||
struct drm_connector *connector;
|
||||
|
||||
if (!fb_helper_conn)
|
||||
return false;
|
||||
connector = fb_helper_conn->connector;
|
||||
|
||||
cmdline_mode = &fb_helper_conn->cmdline_mode;
|
||||
if (!mode_option)
|
||||
|
|
|
@ -138,7 +138,7 @@ static int drm_do_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|||
break;
|
||||
}
|
||||
|
||||
if (!agpmem)
|
||||
if (&agpmem->head == &dev->agp->memory)
|
||||
goto vm_fault_error;
|
||||
|
||||
/*
|
||||
|
|
|
@ -1255,21 +1255,21 @@ long i810_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
}
|
||||
|
||||
struct drm_ioctl_desc i810_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_I810_INIT, i810_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_VERTEX, i810_dma_vertex, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_CLEAR, i810_clear_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_FLUSH, i810_flush_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_GETAGE, i810_getage, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_GETBUF, i810_getbuf, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_SWAP, i810_swap_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_COPY, i810_copybuf, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_DOCOPY, i810_docopy, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_OV0INFO, i810_ov0_info, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_FSTATUS, i810_fstatus, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_OV0FLIP, i810_ov0_flip, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_MC, i810_dma_mc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_RSTATUS, i810_rstatus, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I810_FLIP, i810_flip_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_INIT, i810_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_VERTEX, i810_dma_vertex, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_CLEAR, i810_clear_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_FLUSH, i810_flush_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_GETAGE, i810_getage, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_GETBUF, i810_getbuf, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_SWAP, i810_swap_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_COPY, i810_copybuf, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_DOCOPY, i810_docopy, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_OV0INFO, i810_ov0_info, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_FSTATUS, i810_fstatus, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_OV0FLIP, i810_ov0_flip, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_MC, i810_dma_mc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_RSTATUS, i810_rstatus, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I810_FLIP, i810_flip_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
};
|
||||
|
||||
int i810_max_ioctl = DRM_ARRAY_SIZE(i810_ioctls);
|
||||
|
|
|
@ -1524,20 +1524,20 @@ long i830_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
}
|
||||
|
||||
struct drm_ioctl_desc i830_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_I830_INIT, i830_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_VERTEX, i830_dma_vertex, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_CLEAR, i830_clear_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_FLUSH, i830_flush_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_GETAGE, i830_getage, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_GETBUF, i830_getbuf, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_SWAP, i830_swap_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_COPY, i830_copybuf, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_DOCOPY, i830_docopy, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_FLIP, i830_flip_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_IRQ_EMIT, i830_irq_emit, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_IRQ_WAIT, i830_irq_wait, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_GETPARAM, i830_getparam, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I830_SETPARAM, i830_setparam, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_INIT, i830_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_VERTEX, i830_dma_vertex, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_CLEAR, i830_clear_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_FLUSH, i830_flush_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_GETAGE, i830_getage, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_GETBUF, i830_getbuf, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_SWAP, i830_swap_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_COPY, i830_copybuf, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_DOCOPY, i830_docopy, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_FLIP, i830_flip_bufs, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_IRQ_EMIT, i830_irq_emit, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_IRQ_WAIT, i830_irq_wait, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_GETPARAM, i830_getparam, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I830_SETPARAM, i830_setparam, DRM_AUTH|DRM_UNLOCKED),
|
||||
};
|
||||
|
||||
int i830_max_ioctl = DRM_ARRAY_SIZE(i830_ioctls);
|
||||
|
|
|
@ -2367,46 +2367,46 @@ void i915_driver_postclose(struct drm_device *dev, struct drm_file *file_priv)
|
|||
}
|
||||
|
||||
struct drm_ioctl_desc i915_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_I915_INIT, i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_I915_FLUSH, i915_flush_ioctl, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_FLIP, i915_flip_bufs, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_BATCHBUFFER, i915_batchbuffer, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_IRQ_EMIT, i915_irq_emit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_IRQ_WAIT, i915_irq_wait, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_GETPARAM, i915_getparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_SETPARAM, i915_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_I915_ALLOC, i915_mem_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_FREE, i915_mem_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_INIT_HEAP, i915_mem_init_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_I915_CMDBUFFER, i915_cmdbuffer, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_DESTROY_HEAP, i915_mem_destroy_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
|
||||
DRM_IOCTL_DEF(DRM_I915_SET_VBLANK_PIPE, i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
|
||||
DRM_IOCTL_DEF(DRM_I915_GET_VBLANK_PIPE, i915_vblank_pipe_get, DRM_AUTH ),
|
||||
DRM_IOCTL_DEF(DRM_I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_INIT, i915_gem_init_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_EXECBUFFER, i915_gem_execbuffer, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_EXECBUFFER2, i915_gem_execbuffer2, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_PIN, i915_gem_pin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_UNPIN, i915_gem_unpin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_BUSY, i915_gem_busy_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_THROTTLE, i915_gem_throttle_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_ENTERVT, i915_gem_entervt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_LEAVEVT, i915_gem_leavevt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_CREATE, i915_gem_create_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_PREAD, i915_gem_pread_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_PWRITE, i915_gem_pwrite_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_MMAP, i915_gem_mmap_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_MMAP_GTT, i915_gem_mmap_gtt_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_SET_DOMAIN, i915_gem_set_domain_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_SW_FINISH, i915_gem_sw_finish_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_SET_TILING, i915_gem_set_tiling, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_GET_TILING, i915_gem_get_tiling, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GET_PIPE_FROM_CRTC_ID, intel_get_pipe_from_crtc_id, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_GEM_MADVISE, i915_gem_madvise_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_OVERLAY_PUT_IMAGE, intel_overlay_put_image, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_I915_OVERLAY_ATTRS, intel_overlay_attrs, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_INIT, i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(I915_FLUSH, i915_flush_ioctl, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_FLIP, i915_flip_bufs, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_BATCHBUFFER, i915_batchbuffer, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_IRQ_EMIT, i915_irq_emit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_IRQ_WAIT, i915_irq_wait, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_GETPARAM, i915_getparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_SETPARAM, i915_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(I915_ALLOC, i915_mem_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_FREE, i915_mem_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_INIT_HEAP, i915_mem_init_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(I915_CMDBUFFER, i915_cmdbuffer, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_DESTROY_HEAP, i915_mem_destroy_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(I915_SET_VBLANK_PIPE, i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(I915_GET_VBLANK_PIPE, i915_vblank_pipe_get, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(I915_HWS_ADDR, i915_set_status_page, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_INIT, i915_gem_init_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_EXECBUFFER, i915_gem_execbuffer, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_EXECBUFFER2, i915_gem_execbuffer2, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_PIN, i915_gem_pin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_UNPIN, i915_gem_unpin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_BUSY, i915_gem_busy_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_THROTTLE, i915_gem_throttle_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_ENTERVT, i915_gem_entervt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_LEAVEVT, i915_gem_leavevt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_CREATE, i915_gem_create_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_PREAD, i915_gem_pread_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_PWRITE, i915_gem_pwrite_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_MMAP, i915_gem_mmap_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_MMAP_GTT, i915_gem_mmap_gtt_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_SET_DOMAIN, i915_gem_set_domain_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_SW_FINISH, i915_gem_sw_finish_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_SET_TILING, i915_gem_set_tiling, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_GET_TILING, i915_gem_get_tiling, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GET_PIPE_FROM_CRTC_ID, intel_get_pipe_from_crtc_id, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_GEM_MADVISE, i915_gem_madvise_ioctl, DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_OVERLAY_PUT_IMAGE, intel_overlay_put_image, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(I915_OVERLAY_ATTRS, intel_overlay_attrs, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
|
||||
};
|
||||
|
||||
int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
|
||||
|
|
|
@ -1085,19 +1085,19 @@ file_priv)
|
|||
}
|
||||
|
||||
struct drm_ioctl_desc mga_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_MGA_INIT, mga_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_MGA_FLUSH, mga_dma_flush, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_RESET, mga_dma_reset, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_SWAP, mga_dma_swap, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_CLEAR, mga_dma_clear, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_VERTEX, mga_dma_vertex, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_INDICES, mga_dma_indices, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_ILOAD, mga_dma_iload, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_BLIT, mga_dma_blit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_GETPARAM, mga_getparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_SET_FENCE, mga_set_fence, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_WAIT_FENCE, mga_wait_fence, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_MGA_DMA_BOOTSTRAP, mga_dma_bootstrap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(MGA_INIT, mga_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(MGA_FLUSH, mga_dma_flush, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_RESET, mga_dma_reset, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_SWAP, mga_dma_swap, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_CLEAR, mga_dma_clear, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_VERTEX, mga_dma_vertex, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_INDICES, mga_dma_indices, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_ILOAD, mga_dma_iload, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_BLIT, mga_dma_blit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_GETPARAM, mga_getparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_SET_FENCE, mga_set_fence, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_WAIT_FENCE, mga_wait_fence, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(MGA_DMA_BOOTSTRAP, mga_dma_bootstrap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
};
|
||||
|
||||
int mga_max_ioctl = DRM_ARRAY_SIZE(mga_ioctls);
|
||||
|
|
|
@ -2166,7 +2166,7 @@ peek_fb(struct drm_device *dev, struct io_mapping *fb,
|
|||
uint32_t val = 0;
|
||||
|
||||
if (off < pci_resource_len(dev->pdev, 1)) {
|
||||
uint32_t __iomem *p =
|
||||
uint8_t __iomem *p =
|
||||
io_mapping_map_atomic_wc(fb, off & PAGE_MASK, KM_USER0);
|
||||
|
||||
val = ioread32(p + (off & ~PAGE_MASK));
|
||||
|
@ -2182,7 +2182,7 @@ poke_fb(struct drm_device *dev, struct io_mapping *fb,
|
|||
uint32_t off, uint32_t val)
|
||||
{
|
||||
if (off < pci_resource_len(dev->pdev, 1)) {
|
||||
uint32_t __iomem *p =
|
||||
uint8_t __iomem *p =
|
||||
io_mapping_map_atomic_wc(fb, off & PAGE_MASK, KM_USER0);
|
||||
|
||||
iowrite32(val, p + (off & ~PAGE_MASK));
|
||||
|
@ -4587,7 +4587,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,
|
|||
return 1;
|
||||
}
|
||||
|
||||
NV_TRACE(dev, "0x%04X: parsing output script 0\n", script);
|
||||
NV_DEBUG_KMS(dev, "0x%04X: parsing output script 0\n", script);
|
||||
nouveau_bios_run_init_table(dev, script, dcbent);
|
||||
} else
|
||||
if (pxclk == -1) {
|
||||
|
@ -4597,7 +4597,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,
|
|||
return 1;
|
||||
}
|
||||
|
||||
NV_TRACE(dev, "0x%04X: parsing output script 1\n", script);
|
||||
NV_DEBUG_KMS(dev, "0x%04X: parsing output script 1\n", script);
|
||||
nouveau_bios_run_init_table(dev, script, dcbent);
|
||||
} else
|
||||
if (pxclk == -2) {
|
||||
|
@ -4610,7 +4610,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,
|
|||
return 1;
|
||||
}
|
||||
|
||||
NV_TRACE(dev, "0x%04X: parsing output script 2\n", script);
|
||||
NV_DEBUG_KMS(dev, "0x%04X: parsing output script 2\n", script);
|
||||
nouveau_bios_run_init_table(dev, script, dcbent);
|
||||
} else
|
||||
if (pxclk > 0) {
|
||||
|
@ -4622,7 +4622,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,
|
|||
return 1;
|
||||
}
|
||||
|
||||
NV_TRACE(dev, "0x%04X: parsing clock script 0\n", script);
|
||||
NV_DEBUG_KMS(dev, "0x%04X: parsing clock script 0\n", script);
|
||||
nouveau_bios_run_init_table(dev, script, dcbent);
|
||||
} else
|
||||
if (pxclk < 0) {
|
||||
|
@ -4634,7 +4634,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,
|
|||
return 1;
|
||||
}
|
||||
|
||||
NV_TRACE(dev, "0x%04X: parsing clock script 1\n", script);
|
||||
NV_DEBUG_KMS(dev, "0x%04X: parsing clock script 1\n", script);
|
||||
nouveau_bios_run_init_table(dev, script, dcbent);
|
||||
}
|
||||
|
||||
|
@ -5357,19 +5357,17 @@ static int parse_bit_tmds_tbl_entry(struct drm_device *dev, struct nvbios *bios,
|
|||
}
|
||||
|
||||
tmdstableptr = ROM16(bios->data[bitentry->offset]);
|
||||
|
||||
if (tmdstableptr == 0x0) {
|
||||
if (!tmdstableptr) {
|
||||
NV_ERROR(dev, "Pointer to TMDS table invalid\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
NV_INFO(dev, "TMDS table version %d.%d\n",
|
||||
bios->data[tmdstableptr] >> 4, bios->data[tmdstableptr] & 0xf);
|
||||
|
||||
/* nv50+ has v2.0, but we don't parse it atm */
|
||||
if (bios->data[tmdstableptr] != 0x11) {
|
||||
NV_WARN(dev,
|
||||
"TMDS table revision %d.%d not currently supported\n",
|
||||
bios->data[tmdstableptr] >> 4, bios->data[tmdstableptr] & 0xf);
|
||||
if (bios->data[tmdstableptr] != 0x11)
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
/*
|
||||
* These two scripts are odd: they don't seem to get run even when
|
||||
|
@ -5809,6 +5807,22 @@ parse_dcb_gpio_table(struct nvbios *bios)
|
|||
gpio->line = tvdac_gpio[1] >> 4;
|
||||
gpio->invert = tvdac_gpio[0] & 2;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* No systematic way to store GPIO info on pre-v2.2
|
||||
* DCBs, try to match the PCI device IDs.
|
||||
*/
|
||||
|
||||
/* Apple iMac G4 NV18 */
|
||||
if (dev->pdev->device == 0x0189 &&
|
||||
dev->pdev->subsystem_vendor == 0x10de &&
|
||||
dev->pdev->subsystem_device == 0x0010) {
|
||||
struct dcb_gpio_entry *gpio = new_gpio_entry(bios);
|
||||
|
||||
gpio->tag = DCB_GPIO_TVDAC0;
|
||||
gpio->line = 4;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!gpio_table_ptr)
|
||||
|
|
|
@ -36,6 +36,21 @@
|
|||
#include <linux/log2.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
int
|
||||
nouveau_bo_sync_gpu(struct nouveau_bo *nvbo, struct nouveau_channel *chan)
|
||||
{
|
||||
struct nouveau_fence *prev_fence = nvbo->bo.sync_obj;
|
||||
int ret;
|
||||
|
||||
if (!prev_fence || nouveau_fence_channel(prev_fence) == chan)
|
||||
return 0;
|
||||
|
||||
spin_lock(&nvbo->bo.lock);
|
||||
ret = ttm_bo_wait(&nvbo->bo, false, false, false);
|
||||
spin_unlock(&nvbo->bo.lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
nouveau_bo_del_ttm(struct ttm_buffer_object *bo)
|
||||
{
|
||||
|
|
|
@ -426,18 +426,18 @@ nouveau_ioctl_fifo_free(struct drm_device *dev, void *data,
|
|||
***********************************/
|
||||
|
||||
struct drm_ioctl_desc nouveau_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_GETPARAM, nouveau_ioctl_getparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_SETPARAM, nouveau_ioctl_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_CHANNEL_ALLOC, nouveau_ioctl_fifo_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_CHANNEL_FREE, nouveau_ioctl_fifo_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_GROBJ_ALLOC, nouveau_ioctl_grobj_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_NOTIFIEROBJ_ALLOC, nouveau_ioctl_notifier_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_GPUOBJ_FREE, nouveau_ioctl_gpuobj_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_NEW, nouveau_gem_ioctl_new, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_PUSHBUF, nouveau_gem_ioctl_pushbuf, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_CPU_PREP, nouveau_gem_ioctl_cpu_prep, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_CPU_FINI, nouveau_gem_ioctl_cpu_fini, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_INFO, nouveau_gem_ioctl_info, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_GETPARAM, nouveau_ioctl_getparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_SETPARAM, nouveau_ioctl_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_ALLOC, nouveau_ioctl_fifo_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_CHANNEL_FREE, nouveau_ioctl_fifo_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_GROBJ_ALLOC, nouveau_ioctl_grobj_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_NOTIFIEROBJ_ALLOC, nouveau_ioctl_notifier_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_GPUOBJ_FREE, nouveau_ioctl_gpuobj_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_NEW, nouveau_gem_ioctl_new, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_PUSHBUF, nouveau_gem_ioctl_pushbuf, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_PREP, nouveau_gem_ioctl_cpu_prep, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_CPU_FINI, nouveau_gem_ioctl_cpu_fini, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(NOUVEAU_GEM_INFO, nouveau_gem_ioctl_info, DRM_AUTH),
|
||||
};
|
||||
|
||||
int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls);
|
||||
|
|
|
@ -104,7 +104,7 @@ nouveau_connector_ddc_detect(struct drm_connector *connector,
|
|||
int i;
|
||||
|
||||
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
|
||||
struct nouveau_i2c_chan *i2c;
|
||||
struct nouveau_i2c_chan *i2c = NULL;
|
||||
struct nouveau_encoder *nv_encoder;
|
||||
struct drm_mode_object *obj;
|
||||
int id;
|
||||
|
@ -117,7 +117,9 @@ nouveau_connector_ddc_detect(struct drm_connector *connector,
|
|||
if (!obj)
|
||||
continue;
|
||||
nv_encoder = nouveau_encoder(obj_to_encoder(obj));
|
||||
i2c = nouveau_i2c_find(dev, nv_encoder->dcb->i2c_index);
|
||||
|
||||
if (nv_encoder->dcb->i2c_index < 0xf)
|
||||
i2c = nouveau_i2c_find(dev, nv_encoder->dcb->i2c_index);
|
||||
|
||||
if (i2c && nouveau_probe_i2c_addr(i2c, 0x50)) {
|
||||
*pnv_encoder = nv_encoder;
|
||||
|
|
|
@ -1165,6 +1165,7 @@ extern u16 nouveau_bo_rd16(struct nouveau_bo *nvbo, unsigned index);
|
|||
extern void nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val);
|
||||
extern u32 nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index);
|
||||
extern void nouveau_bo_wr32(struct nouveau_bo *nvbo, unsigned index, u32 val);
|
||||
extern int nouveau_bo_sync_gpu(struct nouveau_bo *, struct nouveau_channel *);
|
||||
|
||||
/* nouveau_fence.c */
|
||||
struct nouveau_fence;
|
||||
|
|
|
@ -361,16 +361,11 @@ validate_list(struct nouveau_channel *chan, struct list_head *list,
|
|||
|
||||
list_for_each_entry(nvbo, list, entry) {
|
||||
struct drm_nouveau_gem_pushbuf_bo *b = &pbbo[nvbo->pbbo_index];
|
||||
struct nouveau_fence *prev_fence = nvbo->bo.sync_obj;
|
||||
|
||||
if (prev_fence && nouveau_fence_channel(prev_fence) != chan) {
|
||||
spin_lock(&nvbo->bo.lock);
|
||||
ret = ttm_bo_wait(&nvbo->bo, false, false, false);
|
||||
spin_unlock(&nvbo->bo.lock);
|
||||
if (unlikely(ret)) {
|
||||
NV_ERROR(dev, "fail wait other chan\n");
|
||||
return ret;
|
||||
}
|
||||
ret = nouveau_bo_sync_gpu(nvbo, chan);
|
||||
if (unlikely(ret)) {
|
||||
NV_ERROR(dev, "fail pre-validate sync\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = nouveau_gem_set_domain(nvbo->gem, b->read_domains,
|
||||
|
@ -381,7 +376,7 @@ validate_list(struct nouveau_channel *chan, struct list_head *list,
|
|||
return ret;
|
||||
}
|
||||
|
||||
nvbo->channel = chan;
|
||||
nvbo->channel = (b->read_domains & (1 << 31)) ? NULL : chan;
|
||||
ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement,
|
||||
false, false, false);
|
||||
nvbo->channel = NULL;
|
||||
|
@ -390,6 +385,12 @@ validate_list(struct nouveau_channel *chan, struct list_head *list,
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = nouveau_bo_sync_gpu(nvbo, chan);
|
||||
if (unlikely(ret)) {
|
||||
NV_ERROR(dev, "fail post-validate sync\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (nvbo->bo.offset == b->presumed.offset &&
|
||||
((nvbo->bo.mem.mem_type == TTM_PL_VRAM &&
|
||||
b->presumed.domain & NOUVEAU_GEM_DOMAIN_VRAM) ||
|
||||
|
@ -615,6 +616,21 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data,
|
|||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
|
||||
/* Mark push buffers as being used on PFIFO, the validation code
|
||||
* will then make sure that if the pushbuf bo moves, that they
|
||||
* happen on the kernel channel, which will in turn cause a sync
|
||||
* to happen before we try and submit the push buffer.
|
||||
*/
|
||||
for (i = 0; i < req->nr_push; i++) {
|
||||
if (push[i].bo_index >= req->nr_buffers) {
|
||||
NV_ERROR(dev, "push %d buffer not in list\n", i);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
bo[push[i].bo_index].read_domains |= (1 << 31);
|
||||
}
|
||||
|
||||
/* Validate buffer list */
|
||||
ret = nouveau_gem_pushbuf_validate(chan, file_priv, bo, req->buffers,
|
||||
req->nr_buffers, &op, &do_reloc);
|
||||
|
|
|
@ -163,7 +163,7 @@ nouveau_i2c_init(struct drm_device *dev, struct dcb_i2c_entry *entry, int index)
|
|||
if (entry->chan)
|
||||
return -EEXIST;
|
||||
|
||||
if (dev_priv->card_type == NV_C0 && entry->read >= NV50_I2C_PORTS) {
|
||||
if (dev_priv->card_type >= NV_50 && entry->read >= NV50_I2C_PORTS) {
|
||||
NV_ERROR(dev, "unknown i2c port %d\n", entry->read);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
|
@ -214,6 +214,7 @@ int
|
|||
nouveau_sgdma_init(struct drm_device *dev)
|
||||
{
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
struct pci_dev *pdev = dev->pdev;
|
||||
struct nouveau_gpuobj *gpuobj = NULL;
|
||||
uint32_t aper_size, obj_size;
|
||||
int i, ret;
|
||||
|
@ -239,10 +240,19 @@ nouveau_sgdma_init(struct drm_device *dev)
|
|||
|
||||
dev_priv->gart_info.sg_dummy_page =
|
||||
alloc_page(GFP_KERNEL|__GFP_DMA32);
|
||||
if (!dev_priv->gart_info.sg_dummy_page) {
|
||||
nouveau_gpuobj_del(dev, &gpuobj);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
set_bit(PG_locked, &dev_priv->gart_info.sg_dummy_page->flags);
|
||||
dev_priv->gart_info.sg_dummy_bus =
|
||||
pci_map_page(dev->pdev, dev_priv->gart_info.sg_dummy_page, 0,
|
||||
pci_map_page(pdev, dev_priv->gart_info.sg_dummy_page, 0,
|
||||
PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
|
||||
if (pci_dma_mapping_error(pdev, dev_priv->gart_info.sg_dummy_bus)) {
|
||||
nouveau_gpuobj_del(dev, &gpuobj);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (dev_priv->card_type < NV_50) {
|
||||
/* Maybe use NV_DMA_TARGET_AGP for PCIE? NVIDIA do this, and
|
||||
|
|
|
@ -129,6 +129,14 @@ get_tv_detect_quirks(struct drm_device *dev, uint32_t *pin_mask)
|
|||
return false;
|
||||
}
|
||||
|
||||
/* MSI nForce2 IGP */
|
||||
if (dev->pdev->device == 0x01f0 &&
|
||||
dev->pdev->subsystem_vendor == 0x1462 &&
|
||||
dev->pdev->subsystem_device == 0x5710) {
|
||||
*pin_mask = 0xc;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -278,7 +278,7 @@ nv50_instmem_init(struct drm_device *dev)
|
|||
/*XXX: incorrect, but needed to make hash func "work" */
|
||||
dev_priv->ramht_offset = 0x10000;
|
||||
dev_priv->ramht_bits = 9;
|
||||
dev_priv->ramht_size = (1 << dev_priv->ramht_bits);
|
||||
dev_priv->ramht_size = (1 << dev_priv->ramht_bits) * 8;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -142,14 +142,16 @@ int
|
|||
nvc0_instmem_suspend(struct drm_device *dev)
|
||||
{
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
u32 *buf;
|
||||
int i;
|
||||
|
||||
dev_priv->susres.ramin_copy = vmalloc(65536);
|
||||
if (!dev_priv->susres.ramin_copy)
|
||||
return -ENOMEM;
|
||||
buf = dev_priv->susres.ramin_copy;
|
||||
|
||||
for (i = 0x700000; i < 0x710000; i += 4)
|
||||
dev_priv->susres.ramin_copy[i/4] = nv_rd32(dev, i);
|
||||
for (i = 0; i < 65536; i += 4)
|
||||
buf[i/4] = nv_rd32(dev, NV04_PRAMIN + i);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -157,14 +159,15 @@ void
|
|||
nvc0_instmem_resume(struct drm_device *dev)
|
||||
{
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
u32 *buf = dev_priv->susres.ramin_copy;
|
||||
u64 chan;
|
||||
int i;
|
||||
|
||||
chan = dev_priv->vram_size - dev_priv->ramin_rsvd_vram;
|
||||
nv_wr32(dev, 0x001700, chan >> 16);
|
||||
|
||||
for (i = 0x700000; i < 0x710000; i += 4)
|
||||
nv_wr32(dev, i, dev_priv->susres.ramin_copy[i/4]);
|
||||
for (i = 0; i < 65536; i += 4)
|
||||
nv_wr32(dev, NV04_PRAMIN + i, buf[i/4]);
|
||||
vfree(dev_priv->susres.ramin_copy);
|
||||
dev_priv->susres.ramin_copy = NULL;
|
||||
|
||||
|
@ -221,7 +224,7 @@ nvc0_instmem_init(struct drm_device *dev)
|
|||
/*XXX: incorrect, but needed to make hash func "work" */
|
||||
dev_priv->ramht_offset = 0x10000;
|
||||
dev_priv->ramht_bits = 9;
|
||||
dev_priv->ramht_size = (1 << dev_priv->ramht_bits);
|
||||
dev_priv->ramht_size = (1 << dev_priv->ramht_bits) * 8;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1639,30 +1639,29 @@ void r128_driver_preclose(struct drm_device *dev, struct drm_file *file_priv)
|
|||
r128_do_cleanup_pageflip(dev);
|
||||
}
|
||||
}
|
||||
|
||||
void r128_driver_lastclose(struct drm_device *dev)
|
||||
{
|
||||
r128_do_cleanup_cce(dev);
|
||||
}
|
||||
|
||||
struct drm_ioctl_desc r128_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_R128_INIT, r128_cce_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_R128_CCE_START, r128_cce_start, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_R128_CCE_STOP, r128_cce_stop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_R128_CCE_RESET, r128_cce_reset, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_R128_CCE_IDLE, r128_cce_idle, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_RESET, r128_engine_reset, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_FULLSCREEN, r128_fullscreen, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_SWAP, r128_cce_swap, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_FLIP, r128_cce_flip, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_CLEAR, r128_cce_clear, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_VERTEX, r128_cce_vertex, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_INDICES, r128_cce_indices, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_BLIT, r128_cce_blit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_DEPTH, r128_cce_depth, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_STIPPLE, r128_cce_stipple, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_R128_INDIRECT, r128_cce_indirect, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_R128_GETPARAM, r128_getparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_INIT, r128_cce_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(R128_CCE_START, r128_cce_start, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(R128_CCE_STOP, r128_cce_stop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(R128_CCE_RESET, r128_cce_reset, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(R128_CCE_IDLE, r128_cce_idle, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_RESET, r128_engine_reset, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_FULLSCREEN, r128_fullscreen, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_SWAP, r128_cce_swap, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_FLIP, r128_cce_flip, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_CLEAR, r128_cce_clear, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_VERTEX, r128_cce_vertex, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_INDICES, r128_cce_indices, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_BLIT, r128_cce_blit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_DEPTH, r128_cce_depth, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_STIPPLE, r128_cce_stipple, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(R128_INDIRECT, r128_cce_indirect, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(R128_GETPARAM, r128_getparam, DRM_AUTH),
|
||||
};
|
||||
|
||||
int r128_max_ioctl = DRM_ARRAY_SIZE(r128_ioctls);
|
||||
|
|
|
@ -471,6 +471,8 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
|
|||
struct radeon_encoder *radeon_encoder = NULL;
|
||||
u32 adjusted_clock = mode->clock;
|
||||
int encoder_mode = 0;
|
||||
u32 dp_clock = mode->clock;
|
||||
int bpc = 8;
|
||||
|
||||
/* reset the pll flags */
|
||||
pll->flags = 0;
|
||||
|
@ -513,6 +515,17 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
|
|||
if (encoder->crtc == crtc) {
|
||||
radeon_encoder = to_radeon_encoder(encoder);
|
||||
encoder_mode = atombios_get_encoder_mode(encoder);
|
||||
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT)) {
|
||||
struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
|
||||
if (connector) {
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
struct radeon_connector_atom_dig *dig_connector =
|
||||
radeon_connector->con_priv;
|
||||
|
||||
dp_clock = dig_connector->dp_clock;
|
||||
}
|
||||
}
|
||||
|
||||
if (ASIC_IS_AVIVO(rdev)) {
|
||||
/* DVO wants 2x pixel clock if the DVO chip is in 12 bit mode */
|
||||
if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1)
|
||||
|
@ -555,6 +568,14 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
|
|||
args.v1.usPixelClock = cpu_to_le16(mode->clock / 10);
|
||||
args.v1.ucTransmitterID = radeon_encoder->encoder_id;
|
||||
args.v1.ucEncodeMode = encoder_mode;
|
||||
if (encoder_mode == ATOM_ENCODER_MODE_DP) {
|
||||
/* may want to enable SS on DP eventually */
|
||||
/* args.v1.ucConfig |=
|
||||
ADJUST_DISPLAY_CONFIG_SS_ENABLE;*/
|
||||
} else if (encoder_mode == ATOM_ENCODER_MODE_LVDS) {
|
||||
args.v1.ucConfig |=
|
||||
ADJUST_DISPLAY_CONFIG_SS_ENABLE;
|
||||
}
|
||||
|
||||
atom_execute_table(rdev->mode_info.atom_context,
|
||||
index, (uint32_t *)&args);
|
||||
|
@ -568,10 +589,20 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
|
|||
if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {
|
||||
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
|
||||
|
||||
if (encoder_mode == ATOM_ENCODER_MODE_DP)
|
||||
if (encoder_mode == ATOM_ENCODER_MODE_DP) {
|
||||
/* may want to enable SS on DP/eDP eventually */
|
||||
/*args.v3.sInput.ucDispPllConfig |=
|
||||
DISPPLL_CONFIG_SS_ENABLE;*/
|
||||
args.v3.sInput.ucDispPllConfig |=
|
||||
DISPPLL_CONFIG_COHERENT_MODE;
|
||||
else {
|
||||
/* 16200 or 27000 */
|
||||
args.v3.sInput.usPixelClock = cpu_to_le16(dp_clock / 10);
|
||||
} else {
|
||||
if (encoder_mode == ATOM_ENCODER_MODE_HDMI) {
|
||||
/* deep color support */
|
||||
args.v3.sInput.usPixelClock =
|
||||
cpu_to_le16((mode->clock * bpc / 8) / 10);
|
||||
}
|
||||
if (dig->coherent_mode)
|
||||
args.v3.sInput.ucDispPllConfig |=
|
||||
DISPPLL_CONFIG_COHERENT_MODE;
|
||||
|
@ -580,13 +611,19 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
|
|||
DISPPLL_CONFIG_DUAL_LINK;
|
||||
}
|
||||
} else if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
|
||||
/* may want to enable SS on DP/eDP eventually */
|
||||
/*args.v3.sInput.ucDispPllConfig |=
|
||||
DISPPLL_CONFIG_SS_ENABLE;*/
|
||||
if (encoder_mode == ATOM_ENCODER_MODE_DP)
|
||||
if (encoder_mode == ATOM_ENCODER_MODE_DP) {
|
||||
/* may want to enable SS on DP/eDP eventually */
|
||||
/*args.v3.sInput.ucDispPllConfig |=
|
||||
DISPPLL_CONFIG_SS_ENABLE;*/
|
||||
args.v3.sInput.ucDispPllConfig |=
|
||||
DISPPLL_CONFIG_COHERENT_MODE;
|
||||
else {
|
||||
/* 16200 or 27000 */
|
||||
args.v3.sInput.usPixelClock = cpu_to_le16(dp_clock / 10);
|
||||
} else if (encoder_mode == ATOM_ENCODER_MODE_LVDS) {
|
||||
/* want to enable SS on LVDS eventually */
|
||||
/*args.v3.sInput.ucDispPllConfig |=
|
||||
DISPPLL_CONFIG_SS_ENABLE;*/
|
||||
} else {
|
||||
if (mode->clock > 165000)
|
||||
args.v3.sInput.ucDispPllConfig |=
|
||||
DISPPLL_CONFIG_DUAL_LINK;
|
||||
|
|
|
@ -610,7 +610,7 @@ void dp_link_train(struct drm_encoder *encoder,
|
|||
enc_id |= ATOM_DP_CONFIG_DIG2_ENCODER;
|
||||
else
|
||||
enc_id |= ATOM_DP_CONFIG_DIG1_ENCODER;
|
||||
if (dig_connector->linkb)
|
||||
if (dig->linkb)
|
||||
enc_id |= ATOM_DP_CONFIG_LINK_B;
|
||||
else
|
||||
enc_id |= ATOM_DP_CONFIG_LINK_A;
|
||||
|
|
|
@ -156,7 +156,13 @@ int radeon_agp_init(struct radeon_device *rdev)
|
|||
}
|
||||
|
||||
mode.mode = info.mode;
|
||||
agp_status = (RREG32(RADEON_AGP_STATUS) | RADEON_AGPv3_MODE) & mode.mode;
|
||||
/* chips with the agp to pcie bridge don't have the AGP_STATUS register
|
||||
* Just use the whatever mode the host sets up.
|
||||
*/
|
||||
if (rdev->family <= CHIP_RV350)
|
||||
agp_status = (RREG32(RADEON_AGP_STATUS) | RADEON_AGPv3_MODE) & mode.mode;
|
||||
else
|
||||
agp_status = mode.mode;
|
||||
is_v3 = !!(agp_status & RADEON_AGPv3_MODE);
|
||||
|
||||
if (is_v3) {
|
||||
|
|
|
@ -733,6 +733,7 @@ static struct radeon_asic evergreen_asic = {
|
|||
.set_engine_clock = &radeon_atom_set_engine_clock,
|
||||
.get_memory_clock = &radeon_atom_get_memory_clock,
|
||||
.set_memory_clock = &radeon_atom_set_memory_clock,
|
||||
.get_pcie_lanes = NULL,
|
||||
.set_pcie_lanes = NULL,
|
||||
.set_clock_gating = NULL,
|
||||
.set_surface_reg = r600_set_surface_reg,
|
||||
|
|
|
@ -32,11 +32,11 @@
|
|||
|
||||
/* from radeon_encoder.c */
|
||||
extern uint32_t
|
||||
radeon_get_encoder_id(struct drm_device *dev, uint32_t supported_device,
|
||||
uint8_t dac);
|
||||
radeon_get_encoder_enum(struct drm_device *dev, uint32_t supported_device,
|
||||
uint8_t dac);
|
||||
extern void radeon_link_encoder_connector(struct drm_device *dev);
|
||||
extern void
|
||||
radeon_add_atom_encoder(struct drm_device *dev, uint32_t encoder_id,
|
||||
radeon_add_atom_encoder(struct drm_device *dev, uint32_t encoder_enum,
|
||||
uint32_t supported_device);
|
||||
|
||||
/* from radeon_connector.c */
|
||||
|
@ -46,14 +46,14 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|||
uint32_t supported_device,
|
||||
int connector_type,
|
||||
struct radeon_i2c_bus_rec *i2c_bus,
|
||||
bool linkb, uint32_t igp_lane_info,
|
||||
uint32_t igp_lane_info,
|
||||
uint16_t connector_object_id,
|
||||
struct radeon_hpd *hpd,
|
||||
struct radeon_router *router);
|
||||
|
||||
/* from radeon_legacy_encoder.c */
|
||||
extern void
|
||||
radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id,
|
||||
radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_enum,
|
||||
uint32_t supported_device);
|
||||
|
||||
union atom_supported_devices {
|
||||
|
@ -226,6 +226,8 @@ static struct radeon_hpd radeon_atom_get_hpd_info_from_gpio(struct radeon_device
|
|||
struct radeon_hpd hpd;
|
||||
u32 reg;
|
||||
|
||||
memset(&hpd, 0, sizeof(struct radeon_hpd));
|
||||
|
||||
if (ASIC_IS_DCE4(rdev))
|
||||
reg = EVERGREEN_DC_GPIO_HPD_A;
|
||||
else
|
||||
|
@ -477,7 +479,6 @@ bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
|
|||
int i, j, k, path_size, device_support;
|
||||
int connector_type;
|
||||
u16 igp_lane_info, conn_id, connector_object_id;
|
||||
bool linkb;
|
||||
struct radeon_i2c_bus_rec ddc_bus;
|
||||
struct radeon_router router;
|
||||
struct radeon_gpio_rec gpio;
|
||||
|
@ -510,7 +511,7 @@ bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
|
|||
addr += path_size;
|
||||
path = (ATOM_DISPLAY_OBJECT_PATH *) addr;
|
||||
path_size += le16_to_cpu(path->usSize);
|
||||
linkb = false;
|
||||
|
||||
if (device_support & le16_to_cpu(path->usDeviceTag)) {
|
||||
uint8_t con_obj_id, con_obj_num, con_obj_type;
|
||||
|
||||
|
@ -601,13 +602,10 @@ bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
|
|||
OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT;
|
||||
|
||||
if (grph_obj_type == GRAPH_OBJECT_TYPE_ENCODER) {
|
||||
if (grph_obj_num == 2)
|
||||
linkb = true;
|
||||
else
|
||||
linkb = false;
|
||||
u16 encoder_obj = le16_to_cpu(path->usGraphicObjIds[j]);
|
||||
|
||||
radeon_add_atom_encoder(dev,
|
||||
grph_obj_id,
|
||||
encoder_obj,
|
||||
le16_to_cpu
|
||||
(path->
|
||||
usDeviceTag));
|
||||
|
@ -744,7 +742,7 @@ bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
|
|||
le16_to_cpu(path->
|
||||
usDeviceTag),
|
||||
connector_type, &ddc_bus,
|
||||
linkb, igp_lane_info,
|
||||
igp_lane_info,
|
||||
connector_object_id,
|
||||
&hpd,
|
||||
&router);
|
||||
|
@ -933,13 +931,13 @@ bool radeon_get_atom_connector_info_from_supported_devices_table(struct
|
|||
|
||||
if (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom)
|
||||
radeon_add_atom_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
(1 << i),
|
||||
dac),
|
||||
(1 << i));
|
||||
else
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
(1 << i),
|
||||
dac),
|
||||
(1 << i));
|
||||
|
@ -996,7 +994,7 @@ bool radeon_get_atom_connector_info_from_supported_devices_table(struct
|
|||
bios_connectors[i].
|
||||
connector_type,
|
||||
&bios_connectors[i].ddc_bus,
|
||||
false, 0,
|
||||
0,
|
||||
connector_object_id,
|
||||
&bios_connectors[i].hpd,
|
||||
&router);
|
||||
|
@ -1183,7 +1181,7 @@ bool radeon_atombios_sideport_present(struct radeon_device *rdev)
|
|||
return true;
|
||||
break;
|
||||
case 2:
|
||||
if (igp_info->info_2.ucMemoryType & 0x0f)
|
||||
if (igp_info->info_2.ulBootUpSidePortClock)
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
|
@ -1305,6 +1303,7 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct
|
|||
union lvds_info *lvds_info;
|
||||
uint8_t frev, crev;
|
||||
struct radeon_encoder_atom_dig *lvds = NULL;
|
||||
int encoder_enum = (encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT;
|
||||
|
||||
if (atom_parse_data_header(mode_info->atom_context, index, NULL,
|
||||
&frev, &crev, &data_offset)) {
|
||||
|
@ -1368,6 +1367,12 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct
|
|||
}
|
||||
|
||||
encoder->native_mode = lvds->native_mode;
|
||||
|
||||
if (encoder_enum == 2)
|
||||
lvds->linkb = true;
|
||||
else
|
||||
lvds->linkb = false;
|
||||
|
||||
}
|
||||
return lvds;
|
||||
}
|
||||
|
|
|
@ -39,8 +39,8 @@
|
|||
|
||||
/* from radeon_encoder.c */
|
||||
extern uint32_t
|
||||
radeon_get_encoder_id(struct drm_device *dev, uint32_t supported_device,
|
||||
uint8_t dac);
|
||||
radeon_get_encoder_enum(struct drm_device *dev, uint32_t supported_device,
|
||||
uint8_t dac);
|
||||
extern void radeon_link_encoder_connector(struct drm_device *dev);
|
||||
|
||||
/* from radeon_connector.c */
|
||||
|
@ -55,7 +55,7 @@ radeon_add_legacy_connector(struct drm_device *dev,
|
|||
|
||||
/* from radeon_legacy_encoder.c */
|
||||
extern void
|
||||
radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id,
|
||||
radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_enum,
|
||||
uint32_t supported_device);
|
||||
|
||||
/* old legacy ATI BIOS routines */
|
||||
|
@ -1505,7 +1505,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_VGA, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
|
@ -1520,7 +1520,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_NONE_DETECTED, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_LCD1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_LCD1_SUPPORT);
|
||||
|
@ -1535,7 +1535,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_VGA, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
|
@ -1550,12 +1550,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_DVI, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_1;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_DFP1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_DFP1_SUPPORT);
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT2_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_CRT2_SUPPORT);
|
||||
|
@ -1571,7 +1571,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_VGA, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
|
@ -1588,7 +1588,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c.valid = false;
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_TV1_SUPPORT);
|
||||
|
@ -1607,7 +1607,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_DVI, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_LCD1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_LCD1_SUPPORT);
|
||||
|
@ -1619,7 +1619,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_VGA, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT2_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_CRT2_SUPPORT);
|
||||
|
@ -1631,7 +1631,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c.valid = false;
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_TV1_SUPPORT);
|
||||
|
@ -1648,7 +1648,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_DVI, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_LCD1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_LCD1_SUPPORT);
|
||||
|
@ -1660,12 +1660,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_VGA, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_2; /* ??? */
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_DFP2_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_DFP2_SUPPORT);
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
|
@ -1680,7 +1680,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c.valid = false;
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_TV1_SUPPORT);
|
||||
|
@ -1697,7 +1697,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_DVI, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_LCD1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_LCD1_SUPPORT);
|
||||
|
@ -1709,12 +1709,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_VGA, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_1; /* ??? */
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_DFP1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_DFP1_SUPPORT);
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
|
@ -1728,7 +1728,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c.valid = false;
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_TV1_SUPPORT);
|
||||
|
@ -1745,7 +1745,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_DVI, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_LCD1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_LCD1_SUPPORT);
|
||||
|
@ -1757,7 +1757,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_VGA, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
|
@ -1769,7 +1769,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c.valid = false;
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_TV1_SUPPORT);
|
||||
|
@ -1786,12 +1786,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_CRT2, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_2; /* ??? */
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_DFP2_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_DFP2_SUPPORT);
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT2_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_CRT2_SUPPORT);
|
||||
|
@ -1806,7 +1806,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c.valid = false;
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_TV1_SUPPORT);
|
||||
|
@ -1823,12 +1823,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_CRT2, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_1; /* ??? */
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_DFP1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_DFP1_SUPPORT);
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT2_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_CRT2_SUPPORT);
|
||||
|
@ -1842,7 +1842,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c.valid = false;
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_TV1_SUPPORT);
|
||||
|
@ -1859,7 +1859,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_MONID, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_1; /* ??? */
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_DFP1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_DFP1_SUPPORT);
|
||||
|
@ -1871,7 +1871,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_DVI, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT2_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_CRT2_SUPPORT);
|
||||
|
@ -1883,7 +1883,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c.valid = false;
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_TV1_SUPPORT);
|
||||
|
@ -1900,7 +1900,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_VGA, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
|
@ -1912,7 +1912,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_CRT2, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT2_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_CRT2_SUPPORT);
|
||||
|
@ -1924,7 +1924,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c.valid = false;
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_TV1_SUPPORT);
|
||||
|
@ -1941,7 +1941,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_VGA, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
|
@ -1952,7 +1952,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
|
|||
ddc_i2c = combios_setup_i2c_bus(rdev, DDC_CRT2, 0, 0);
|
||||
hpd.hpd = RADEON_HPD_NONE;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT2_SUPPORT,
|
||||
2),
|
||||
ATOM_DEVICE_CRT2_SUPPORT);
|
||||
|
@ -2109,7 +2109,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
else
|
||||
devices = ATOM_DEVICE_DFP1_SUPPORT;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev, devices, 0),
|
||||
devices);
|
||||
radeon_add_legacy_connector(dev, i, devices,
|
||||
|
@ -2123,7 +2123,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
if (tmp & 0x1) {
|
||||
devices = ATOM_DEVICE_CRT2_SUPPORT;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev,
|
||||
ATOM_DEVICE_CRT2_SUPPORT,
|
||||
2),
|
||||
|
@ -2131,7 +2131,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
} else {
|
||||
devices = ATOM_DEVICE_CRT1_SUPPORT;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
|
@ -2151,7 +2151,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
if (tmp & 0x1) {
|
||||
devices |= ATOM_DEVICE_CRT2_SUPPORT;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev,
|
||||
ATOM_DEVICE_CRT2_SUPPORT,
|
||||
2),
|
||||
|
@ -2159,7 +2159,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
} else {
|
||||
devices |= ATOM_DEVICE_CRT1_SUPPORT;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
|
@ -2168,7 +2168,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
if ((tmp >> 4) & 0x1) {
|
||||
devices |= ATOM_DEVICE_DFP2_SUPPORT;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev,
|
||||
ATOM_DEVICE_DFP2_SUPPORT,
|
||||
0),
|
||||
|
@ -2177,7 +2177,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
} else {
|
||||
devices |= ATOM_DEVICE_DFP1_SUPPORT;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev,
|
||||
ATOM_DEVICE_DFP1_SUPPORT,
|
||||
0),
|
||||
|
@ -2202,7 +2202,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
connector_object_id = CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I;
|
||||
}
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev, devices, 0),
|
||||
devices);
|
||||
radeon_add_legacy_connector(dev, i, devices,
|
||||
|
@ -2215,7 +2215,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
case CONNECTOR_CTV_LEGACY:
|
||||
case CONNECTOR_STV_LEGACY:
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
|
@ -2242,12 +2242,12 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
DRM_DEBUG_KMS("Found DFP table, assuming DVI connector\n");
|
||||
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_DFP1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_DFP1_SUPPORT);
|
||||
|
@ -2268,7 +2268,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
DRM_DEBUG_KMS("Found CRT table, assuming VGA connector\n");
|
||||
if (crt_info) {
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_CRT1_SUPPORT,
|
||||
1),
|
||||
ATOM_DEVICE_CRT1_SUPPORT);
|
||||
|
@ -2297,7 +2297,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
COMBIOS_LCD_DDC_INFO_TABLE);
|
||||
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id(dev,
|
||||
radeon_get_encoder_enum(dev,
|
||||
ATOM_DEVICE_LCD1_SUPPORT,
|
||||
0),
|
||||
ATOM_DEVICE_LCD1_SUPPORT);
|
||||
|
@ -2351,7 +2351,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
hpd.hpd = RADEON_HPD_NONE;
|
||||
ddc_i2c.valid = false;
|
||||
radeon_add_legacy_encoder(dev,
|
||||
radeon_get_encoder_id
|
||||
radeon_get_encoder_enum
|
||||
(dev,
|
||||
ATOM_DEVICE_TV1_SUPPORT,
|
||||
2),
|
||||
|
|
|
@ -977,24 +977,25 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto
|
|||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
enum drm_connector_status ret = connector_status_disconnected;
|
||||
struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
|
||||
u8 sink_type;
|
||||
|
||||
if (radeon_connector->edid) {
|
||||
kfree(radeon_connector->edid);
|
||||
radeon_connector->edid = NULL;
|
||||
}
|
||||
|
||||
sink_type = radeon_dp_getsinktype(radeon_connector);
|
||||
if ((sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
|
||||
(sink_type == CONNECTOR_OBJECT_ID_eDP)) {
|
||||
if (radeon_dp_getdpcd(radeon_connector)) {
|
||||
radeon_dig_connector->dp_sink_type = sink_type;
|
||||
if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
|
||||
/* eDP is always DP */
|
||||
radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
|
||||
if (radeon_dp_getdpcd(radeon_connector))
|
||||
ret = connector_status_connected;
|
||||
}
|
||||
} else {
|
||||
if (radeon_ddc_probe(radeon_connector)) {
|
||||
radeon_dig_connector->dp_sink_type = sink_type;
|
||||
ret = connector_status_connected;
|
||||
radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
|
||||
if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
|
||||
if (radeon_dp_getdpcd(radeon_connector))
|
||||
ret = connector_status_connected;
|
||||
} else {
|
||||
if (radeon_ddc_probe(radeon_connector))
|
||||
ret = connector_status_connected;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1037,7 +1038,6 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|||
uint32_t supported_device,
|
||||
int connector_type,
|
||||
struct radeon_i2c_bus_rec *i2c_bus,
|
||||
bool linkb,
|
||||
uint32_t igp_lane_info,
|
||||
uint16_t connector_object_id,
|
||||
struct radeon_hpd *hpd,
|
||||
|
@ -1128,7 +1128,6 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|||
radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
|
||||
if (!radeon_dig_connector)
|
||||
goto failed;
|
||||
radeon_dig_connector->linkb = linkb;
|
||||
radeon_dig_connector->igp_lane_info = igp_lane_info;
|
||||
radeon_connector->con_priv = radeon_dig_connector;
|
||||
drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
|
||||
|
@ -1158,7 +1157,6 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|||
radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
|
||||
if (!radeon_dig_connector)
|
||||
goto failed;
|
||||
radeon_dig_connector->linkb = linkb;
|
||||
radeon_dig_connector->igp_lane_info = igp_lane_info;
|
||||
radeon_connector->con_priv = radeon_dig_connector;
|
||||
drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
|
||||
|
@ -1182,7 +1180,6 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|||
radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
|
||||
if (!radeon_dig_connector)
|
||||
goto failed;
|
||||
radeon_dig_connector->linkb = linkb;
|
||||
radeon_dig_connector->igp_lane_info = igp_lane_info;
|
||||
radeon_connector->con_priv = radeon_dig_connector;
|
||||
drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
|
||||
|
@ -1229,7 +1226,6 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|||
radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
|
||||
if (!radeon_dig_connector)
|
||||
goto failed;
|
||||
radeon_dig_connector->linkb = linkb;
|
||||
radeon_dig_connector->igp_lane_info = igp_lane_info;
|
||||
radeon_connector->con_priv = radeon_dig_connector;
|
||||
drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
|
||||
|
|
|
@ -199,7 +199,7 @@ void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *mc, u64
|
|||
mc->mc_vram_size = mc->aper_size;
|
||||
}
|
||||
mc->vram_end = mc->vram_start + mc->mc_vram_size - 1;
|
||||
if (rdev->flags & RADEON_IS_AGP && mc->vram_end > mc->gtt_start && mc->vram_end <= mc->gtt_end) {
|
||||
if (rdev->flags & RADEON_IS_AGP && mc->vram_end > mc->gtt_start && mc->vram_start <= mc->gtt_end) {
|
||||
dev_warn(rdev->dev, "limiting VRAM to PCI aperture size\n");
|
||||
mc->real_vram_size = mc->aper_size;
|
||||
mc->mc_vram_size = mc->aper_size;
|
||||
|
|
|
@ -1094,6 +1094,18 @@ void radeon_modeset_fini(struct radeon_device *rdev)
|
|||
radeon_i2c_fini(rdev);
|
||||
}
|
||||
|
||||
static bool is_hdtv_mode(struct drm_display_mode *mode)
|
||||
{
|
||||
/* try and guess if this is a tv or a monitor */
|
||||
if ((mode->vdisplay == 480 && mode->hdisplay == 720) || /* 480p */
|
||||
(mode->vdisplay == 576) || /* 576p */
|
||||
(mode->vdisplay == 720) || /* 720p */
|
||||
(mode->vdisplay == 1080)) /* 1080p */
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
|
||||
struct drm_display_mode *mode,
|
||||
struct drm_display_mode *adjusted_mode)
|
||||
|
@ -1141,7 +1153,8 @@ bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
|
|||
if (ASIC_IS_AVIVO(rdev) &&
|
||||
((radeon_encoder->underscan_type == UNDERSCAN_ON) ||
|
||||
((radeon_encoder->underscan_type == UNDERSCAN_AUTO) &&
|
||||
drm_detect_hdmi_monitor(radeon_connector->edid)))) {
|
||||
drm_detect_hdmi_monitor(radeon_connector->edid) &&
|
||||
is_hdtv_mode(mode)))) {
|
||||
radeon_crtc->h_border = (mode->hdisplay >> 5) + 16;
|
||||
radeon_crtc->v_border = (mode->vdisplay >> 5) + 16;
|
||||
radeon_crtc->rmx_type = RMX_FULL;
|
||||
|
|
|
@ -81,7 +81,7 @@ void radeon_setup_encoder_clones(struct drm_device *dev)
|
|||
}
|
||||
|
||||
uint32_t
|
||||
radeon_get_encoder_id(struct drm_device *dev, uint32_t supported_device, uint8_t dac)
|
||||
radeon_get_encoder_enum(struct drm_device *dev, uint32_t supported_device, uint8_t dac)
|
||||
{
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
uint32_t ret = 0;
|
||||
|
@ -97,59 +97,59 @@ radeon_get_encoder_id(struct drm_device *dev, uint32_t supported_device, uint8_t
|
|||
if ((rdev->family == CHIP_RS300) ||
|
||||
(rdev->family == CHIP_RS400) ||
|
||||
(rdev->family == CHIP_RS480))
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_DAC2;
|
||||
ret = ENCODER_INTERNAL_DAC2_ENUM_ID1;
|
||||
else if (ASIC_IS_AVIVO(rdev))
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1;
|
||||
ret = ENCODER_INTERNAL_KLDSCP_DAC1_ENUM_ID1;
|
||||
else
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_DAC1;
|
||||
ret = ENCODER_INTERNAL_DAC1_ENUM_ID1;
|
||||
break;
|
||||
case 2: /* dac b */
|
||||
if (ASIC_IS_AVIVO(rdev))
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2;
|
||||
ret = ENCODER_INTERNAL_KLDSCP_DAC2_ENUM_ID1;
|
||||
else {
|
||||
/*if (rdev->family == CHIP_R200)
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_DVO1;
|
||||
ret = ENCODER_INTERNAL_DVO1_ENUM_ID1;
|
||||
else*/
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_DAC2;
|
||||
ret = ENCODER_INTERNAL_DAC2_ENUM_ID1;
|
||||
}
|
||||
break;
|
||||
case 3: /* external dac */
|
||||
if (ASIC_IS_AVIVO(rdev))
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1;
|
||||
ret = ENCODER_INTERNAL_KLDSCP_DVO1_ENUM_ID1;
|
||||
else
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_DVO1;
|
||||
ret = ENCODER_INTERNAL_DVO1_ENUM_ID1;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ATOM_DEVICE_LCD1_SUPPORT:
|
||||
if (ASIC_IS_AVIVO(rdev))
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_LVTM1;
|
||||
ret = ENCODER_INTERNAL_LVTM1_ENUM_ID1;
|
||||
else
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_LVDS;
|
||||
ret = ENCODER_INTERNAL_LVDS_ENUM_ID1;
|
||||
break;
|
||||
case ATOM_DEVICE_DFP1_SUPPORT:
|
||||
if ((rdev->family == CHIP_RS300) ||
|
||||
(rdev->family == CHIP_RS400) ||
|
||||
(rdev->family == CHIP_RS480))
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_DVO1;
|
||||
ret = ENCODER_INTERNAL_DVO1_ENUM_ID1;
|
||||
else if (ASIC_IS_AVIVO(rdev))
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1;
|
||||
ret = ENCODER_INTERNAL_KLDSCP_TMDS1_ENUM_ID1;
|
||||
else
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_TMDS1;
|
||||
ret = ENCODER_INTERNAL_TMDS1_ENUM_ID1;
|
||||
break;
|
||||
case ATOM_DEVICE_LCD2_SUPPORT:
|
||||
case ATOM_DEVICE_DFP2_SUPPORT:
|
||||
if ((rdev->family == CHIP_RS600) ||
|
||||
(rdev->family == CHIP_RS690) ||
|
||||
(rdev->family == CHIP_RS740))
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_DDI;
|
||||
ret = ENCODER_INTERNAL_DDI_ENUM_ID1;
|
||||
else if (ASIC_IS_AVIVO(rdev))
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1;
|
||||
ret = ENCODER_INTERNAL_KLDSCP_DVO1_ENUM_ID1;
|
||||
else
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_DVO1;
|
||||
ret = ENCODER_INTERNAL_DVO1_ENUM_ID1;
|
||||
break;
|
||||
case ATOM_DEVICE_DFP3_SUPPORT:
|
||||
ret = ENCODER_OBJECT_ID_INTERNAL_LVTM1;
|
||||
ret = ENCODER_INTERNAL_LVTM1_ENUM_ID1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -228,32 +228,6 @@ radeon_get_connector_for_encoder(struct drm_encoder *encoder)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static struct radeon_connector_atom_dig *
|
||||
radeon_get_atom_connector_priv_from_encoder(struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_device *dev = encoder->dev;
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct drm_connector *connector;
|
||||
struct radeon_connector *radeon_connector;
|
||||
struct radeon_connector_atom_dig *dig_connector;
|
||||
|
||||
if (!rdev->is_atom_bios)
|
||||
return NULL;
|
||||
|
||||
connector = radeon_get_connector_for_encoder(encoder);
|
||||
if (!connector)
|
||||
return NULL;
|
||||
|
||||
radeon_connector = to_radeon_connector(connector);
|
||||
|
||||
if (!radeon_connector->con_priv)
|
||||
return NULL;
|
||||
|
||||
dig_connector = radeon_connector->con_priv;
|
||||
|
||||
return dig_connector;
|
||||
}
|
||||
|
||||
void radeon_panel_mode_fixup(struct drm_encoder *encoder,
|
||||
struct drm_display_mode *adjusted_mode)
|
||||
{
|
||||
|
@ -512,14 +486,12 @@ atombios_digital_setup(struct drm_encoder *encoder, int action)
|
|||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
||||
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
|
||||
struct radeon_connector_atom_dig *dig_connector =
|
||||
radeon_get_atom_connector_priv_from_encoder(encoder);
|
||||
union lvds_encoder_control args;
|
||||
int index = 0;
|
||||
int hdmi_detected = 0;
|
||||
uint8_t frev, crev;
|
||||
|
||||
if (!dig || !dig_connector)
|
||||
if (!dig)
|
||||
return;
|
||||
|
||||
if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI)
|
||||
|
@ -562,7 +534,7 @@ atombios_digital_setup(struct drm_encoder *encoder, int action)
|
|||
if (dig->lvds_misc & ATOM_PANEL_MISC_888RGB)
|
||||
args.v1.ucMisc |= (1 << 1);
|
||||
} else {
|
||||
if (dig_connector->linkb)
|
||||
if (dig->linkb)
|
||||
args.v1.ucMisc |= PANEL_ENCODER_MISC_TMDS_LINKB;
|
||||
if (radeon_encoder->pixel_clock > 165000)
|
||||
args.v1.ucMisc |= PANEL_ENCODER_MISC_DUAL;
|
||||
|
@ -601,7 +573,7 @@ atombios_digital_setup(struct drm_encoder *encoder, int action)
|
|||
args.v2.ucTemporal |= PANEL_ENCODER_TEMPORAL_LEVEL_4;
|
||||
}
|
||||
} else {
|
||||
if (dig_connector->linkb)
|
||||
if (dig->linkb)
|
||||
args.v2.ucMisc |= PANEL_ENCODER_MISC_TMDS_LINKB;
|
||||
if (radeon_encoder->pixel_clock > 165000)
|
||||
args.v2.ucMisc |= PANEL_ENCODER_MISC_DUAL;
|
||||
|
@ -623,6 +595,8 @@ atombios_digital_setup(struct drm_encoder *encoder, int action)
|
|||
int
|
||||
atombios_get_encoder_mode(struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_device *dev = encoder->dev;
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct drm_connector *connector;
|
||||
struct radeon_connector *radeon_connector;
|
||||
struct radeon_connector_atom_dig *dig_connector;
|
||||
|
@ -636,9 +610,13 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
|
|||
switch (connector->connector_type) {
|
||||
case DRM_MODE_CONNECTOR_DVII:
|
||||
case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */
|
||||
if (drm_detect_hdmi_monitor(radeon_connector->edid))
|
||||
return ATOM_ENCODER_MODE_HDMI;
|
||||
else if (radeon_connector->use_digital)
|
||||
if (drm_detect_hdmi_monitor(radeon_connector->edid)) {
|
||||
/* fix me */
|
||||
if (ASIC_IS_DCE4(rdev))
|
||||
return ATOM_ENCODER_MODE_DVI;
|
||||
else
|
||||
return ATOM_ENCODER_MODE_HDMI;
|
||||
} else if (radeon_connector->use_digital)
|
||||
return ATOM_ENCODER_MODE_DVI;
|
||||
else
|
||||
return ATOM_ENCODER_MODE_CRT;
|
||||
|
@ -646,9 +624,13 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
|
|||
case DRM_MODE_CONNECTOR_DVID:
|
||||
case DRM_MODE_CONNECTOR_HDMIA:
|
||||
default:
|
||||
if (drm_detect_hdmi_monitor(radeon_connector->edid))
|
||||
return ATOM_ENCODER_MODE_HDMI;
|
||||
else
|
||||
if (drm_detect_hdmi_monitor(radeon_connector->edid)) {
|
||||
/* fix me */
|
||||
if (ASIC_IS_DCE4(rdev))
|
||||
return ATOM_ENCODER_MODE_DVI;
|
||||
else
|
||||
return ATOM_ENCODER_MODE_HDMI;
|
||||
} else
|
||||
return ATOM_ENCODER_MODE_DVI;
|
||||
break;
|
||||
case DRM_MODE_CONNECTOR_LVDS:
|
||||
|
@ -660,9 +642,13 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
|
|||
if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
|
||||
(dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
|
||||
return ATOM_ENCODER_MODE_DP;
|
||||
else if (drm_detect_hdmi_monitor(radeon_connector->edid))
|
||||
return ATOM_ENCODER_MODE_HDMI;
|
||||
else
|
||||
else if (drm_detect_hdmi_monitor(radeon_connector->edid)) {
|
||||
/* fix me */
|
||||
if (ASIC_IS_DCE4(rdev))
|
||||
return ATOM_ENCODER_MODE_DVI;
|
||||
else
|
||||
return ATOM_ENCODER_MODE_HDMI;
|
||||
} else
|
||||
return ATOM_ENCODER_MODE_DVI;
|
||||
break;
|
||||
case DRM_MODE_CONNECTOR_DVIA:
|
||||
|
@ -729,13 +715,24 @@ atombios_dig_encoder_setup(struct drm_encoder *encoder, int action)
|
|||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
||||
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
|
||||
struct radeon_connector_atom_dig *dig_connector =
|
||||
radeon_get_atom_connector_priv_from_encoder(encoder);
|
||||
struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
|
||||
union dig_encoder_control args;
|
||||
int index = 0;
|
||||
uint8_t frev, crev;
|
||||
int dp_clock = 0;
|
||||
int dp_lane_count = 0;
|
||||
|
||||
if (!dig || !dig_connector)
|
||||
if (connector) {
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
struct radeon_connector_atom_dig *dig_connector =
|
||||
radeon_connector->con_priv;
|
||||
|
||||
dp_clock = dig_connector->dp_clock;
|
||||
dp_lane_count = dig_connector->dp_lane_count;
|
||||
}
|
||||
|
||||
/* no dig encoder assigned */
|
||||
if (dig->dig_encoder == -1)
|
||||
return;
|
||||
|
||||
memset(&args, 0, sizeof(args));
|
||||
|
@ -757,9 +754,9 @@ atombios_dig_encoder_setup(struct drm_encoder *encoder, int action)
|
|||
args.v1.ucEncoderMode = atombios_get_encoder_mode(encoder);
|
||||
|
||||
if (args.v1.ucEncoderMode == ATOM_ENCODER_MODE_DP) {
|
||||
if (dig_connector->dp_clock == 270000)
|
||||
if (dp_clock == 270000)
|
||||
args.v1.ucConfig |= ATOM_ENCODER_CONFIG_DPLINKRATE_2_70GHZ;
|
||||
args.v1.ucLaneNum = dig_connector->dp_lane_count;
|
||||
args.v1.ucLaneNum = dp_lane_count;
|
||||
} else if (radeon_encoder->pixel_clock > 165000)
|
||||
args.v1.ucLaneNum = 8;
|
||||
else
|
||||
|
@ -781,7 +778,7 @@ atombios_dig_encoder_setup(struct drm_encoder *encoder, int action)
|
|||
args.v1.ucConfig = ATOM_ENCODER_CONFIG_V2_TRANSMITTER3;
|
||||
break;
|
||||
}
|
||||
if (dig_connector->linkb)
|
||||
if (dig->linkb)
|
||||
args.v1.ucConfig |= ATOM_ENCODER_CONFIG_LINKB;
|
||||
else
|
||||
args.v1.ucConfig |= ATOM_ENCODER_CONFIG_LINKA;
|
||||
|
@ -804,38 +801,47 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
|
|||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
||||
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
|
||||
struct radeon_connector_atom_dig *dig_connector =
|
||||
radeon_get_atom_connector_priv_from_encoder(encoder);
|
||||
struct drm_connector *connector;
|
||||
struct radeon_connector *radeon_connector;
|
||||
struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
|
||||
union dig_transmitter_control args;
|
||||
int index = 0;
|
||||
uint8_t frev, crev;
|
||||
bool is_dp = false;
|
||||
int pll_id = 0;
|
||||
int dp_clock = 0;
|
||||
int dp_lane_count = 0;
|
||||
int connector_object_id = 0;
|
||||
int igp_lane_info = 0;
|
||||
|
||||
if (!dig || !dig_connector)
|
||||
if (connector) {
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
struct radeon_connector_atom_dig *dig_connector =
|
||||
radeon_connector->con_priv;
|
||||
|
||||
dp_clock = dig_connector->dp_clock;
|
||||
dp_lane_count = dig_connector->dp_lane_count;
|
||||
connector_object_id =
|
||||
(radeon_connector->connector_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT;
|
||||
igp_lane_info = dig_connector->igp_lane_info;
|
||||
}
|
||||
|
||||
/* no dig encoder assigned */
|
||||
if (dig->dig_encoder == -1)
|
||||
return;
|
||||
|
||||
connector = radeon_get_connector_for_encoder(encoder);
|
||||
radeon_connector = to_radeon_connector(connector);
|
||||
|
||||
if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP)
|
||||
is_dp = true;
|
||||
|
||||
memset(&args, 0, sizeof(args));
|
||||
|
||||
if (ASIC_IS_DCE32(rdev) || ASIC_IS_DCE4(rdev))
|
||||
switch (radeon_encoder->encoder_id) {
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
|
||||
index = GetIndexIntoMasterTable(COMMAND, UNIPHYTransmitterControl);
|
||||
else {
|
||||
switch (radeon_encoder->encoder_id) {
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
|
||||
index = GetIndexIntoMasterTable(COMMAND, DIG1TransmitterControl);
|
||||
break;
|
||||
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
|
||||
index = GetIndexIntoMasterTable(COMMAND, DIG2TransmitterControl);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
|
||||
index = GetIndexIntoMasterTable(COMMAND, LVTMATransmitterControl);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev))
|
||||
|
@ -843,14 +849,14 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
|
|||
|
||||
args.v1.ucAction = action;
|
||||
if (action == ATOM_TRANSMITTER_ACTION_INIT) {
|
||||
args.v1.usInitInfo = radeon_connector->connector_object_id;
|
||||
args.v1.usInitInfo = connector_object_id;
|
||||
} else if (action == ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH) {
|
||||
args.v1.asMode.ucLaneSel = lane_num;
|
||||
args.v1.asMode.ucLaneSet = lane_set;
|
||||
} else {
|
||||
if (is_dp)
|
||||
args.v1.usPixelClock =
|
||||
cpu_to_le16(dig_connector->dp_clock / 10);
|
||||
cpu_to_le16(dp_clock / 10);
|
||||
else if (radeon_encoder->pixel_clock > 165000)
|
||||
args.v1.usPixelClock = cpu_to_le16((radeon_encoder->pixel_clock / 2) / 10);
|
||||
else
|
||||
|
@ -858,13 +864,13 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
|
|||
}
|
||||
if (ASIC_IS_DCE4(rdev)) {
|
||||
if (is_dp)
|
||||
args.v3.ucLaneNum = dig_connector->dp_lane_count;
|
||||
args.v3.ucLaneNum = dp_lane_count;
|
||||
else if (radeon_encoder->pixel_clock > 165000)
|
||||
args.v3.ucLaneNum = 8;
|
||||
else
|
||||
args.v3.ucLaneNum = 4;
|
||||
|
||||
if (dig_connector->linkb) {
|
||||
if (dig->linkb) {
|
||||
args.v3.acConfig.ucLinkSel = 1;
|
||||
args.v3.acConfig.ucEncoderSel = 1;
|
||||
}
|
||||
|
@ -904,7 +910,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
|
|||
}
|
||||
} else if (ASIC_IS_DCE32(rdev)) {
|
||||
args.v2.acConfig.ucEncoderSel = dig->dig_encoder;
|
||||
if (dig_connector->linkb)
|
||||
if (dig->linkb)
|
||||
args.v2.acConfig.ucLinkSel = 1;
|
||||
|
||||
switch (radeon_encoder->encoder_id) {
|
||||
|
@ -938,23 +944,23 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
|
|||
if ((rdev->flags & RADEON_IS_IGP) &&
|
||||
(radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_UNIPHY)) {
|
||||
if (is_dp || (radeon_encoder->pixel_clock <= 165000)) {
|
||||
if (dig_connector->igp_lane_info & 0x1)
|
||||
if (igp_lane_info & 0x1)
|
||||
args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_0_3;
|
||||
else if (dig_connector->igp_lane_info & 0x2)
|
||||
else if (igp_lane_info & 0x2)
|
||||
args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_4_7;
|
||||
else if (dig_connector->igp_lane_info & 0x4)
|
||||
else if (igp_lane_info & 0x4)
|
||||
args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_8_11;
|
||||
else if (dig_connector->igp_lane_info & 0x8)
|
||||
else if (igp_lane_info & 0x8)
|
||||
args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_12_15;
|
||||
} else {
|
||||
if (dig_connector->igp_lane_info & 0x3)
|
||||
if (igp_lane_info & 0x3)
|
||||
args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_0_7;
|
||||
else if (dig_connector->igp_lane_info & 0xc)
|
||||
else if (igp_lane_info & 0xc)
|
||||
args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_8_15;
|
||||
}
|
||||
}
|
||||
|
||||
if (dig_connector->linkb)
|
||||
if (dig->linkb)
|
||||
args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKB;
|
||||
else
|
||||
args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKA;
|
||||
|
@ -1072,8 +1078,7 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode)
|
|||
if (is_dig) {
|
||||
switch (mode) {
|
||||
case DRM_MODE_DPMS_ON:
|
||||
if (!ASIC_IS_DCE4(rdev))
|
||||
atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
|
||||
atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
|
||||
if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP) {
|
||||
struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
|
||||
|
||||
|
@ -1085,8 +1090,7 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode)
|
|||
case DRM_MODE_DPMS_STANDBY:
|
||||
case DRM_MODE_DPMS_SUSPEND:
|
||||
case DRM_MODE_DPMS_OFF:
|
||||
if (!ASIC_IS_DCE4(rdev))
|
||||
atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT, 0, 0);
|
||||
atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT, 0, 0);
|
||||
if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP) {
|
||||
if (ASIC_IS_DCE4(rdev))
|
||||
atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_OFF);
|
||||
|
@ -1290,24 +1294,22 @@ static int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder)
|
|||
uint32_t dig_enc_in_use = 0;
|
||||
|
||||
if (ASIC_IS_DCE4(rdev)) {
|
||||
struct radeon_connector_atom_dig *dig_connector =
|
||||
radeon_get_atom_connector_priv_from_encoder(encoder);
|
||||
|
||||
dig = radeon_encoder->enc_priv;
|
||||
switch (radeon_encoder->encoder_id) {
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
|
||||
if (dig_connector->linkb)
|
||||
if (dig->linkb)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
break;
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
|
||||
if (dig_connector->linkb)
|
||||
if (dig->linkb)
|
||||
return 3;
|
||||
else
|
||||
return 2;
|
||||
break;
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
|
||||
if (dig_connector->linkb)
|
||||
if (dig->linkb)
|
||||
return 5;
|
||||
else
|
||||
return 4;
|
||||
|
@ -1641,6 +1643,7 @@ radeon_atombios_set_dac_info(struct radeon_encoder *radeon_encoder)
|
|||
struct radeon_encoder_atom_dig *
|
||||
radeon_atombios_set_dig_info(struct radeon_encoder *radeon_encoder)
|
||||
{
|
||||
int encoder_enum = (radeon_encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT;
|
||||
struct radeon_encoder_atom_dig *dig = kzalloc(sizeof(struct radeon_encoder_atom_dig), GFP_KERNEL);
|
||||
|
||||
if (!dig)
|
||||
|
@ -1650,11 +1653,16 @@ radeon_atombios_set_dig_info(struct radeon_encoder *radeon_encoder)
|
|||
dig->coherent_mode = true;
|
||||
dig->dig_encoder = -1;
|
||||
|
||||
if (encoder_enum == 2)
|
||||
dig->linkb = true;
|
||||
else
|
||||
dig->linkb = false;
|
||||
|
||||
return dig;
|
||||
}
|
||||
|
||||
void
|
||||
radeon_add_atom_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t supported_device)
|
||||
radeon_add_atom_encoder(struct drm_device *dev, uint32_t encoder_enum, uint32_t supported_device)
|
||||
{
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct drm_encoder *encoder;
|
||||
|
@ -1663,7 +1671,7 @@ radeon_add_atom_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t su
|
|||
/* see if we already added it */
|
||||
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
|
||||
radeon_encoder = to_radeon_encoder(encoder);
|
||||
if (radeon_encoder->encoder_id == encoder_id) {
|
||||
if (radeon_encoder->encoder_enum == encoder_enum) {
|
||||
radeon_encoder->devices |= supported_device;
|
||||
return;
|
||||
}
|
||||
|
@ -1691,7 +1699,8 @@ radeon_add_atom_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t su
|
|||
|
||||
radeon_encoder->enc_priv = NULL;
|
||||
|
||||
radeon_encoder->encoder_id = encoder_id;
|
||||
radeon_encoder->encoder_enum = encoder_enum;
|
||||
radeon_encoder->encoder_id = (encoder_enum & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT;
|
||||
radeon_encoder->devices = supported_device;
|
||||
radeon_encoder->rmx_type = RMX_OFF;
|
||||
radeon_encoder->underscan_type = UNDERSCAN_OFF;
|
||||
|
|
|
@ -118,7 +118,7 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev,
|
|||
aligned_size = ALIGN(size, PAGE_SIZE);
|
||||
ret = radeon_gem_object_create(rdev, aligned_size, 0,
|
||||
RADEON_GEM_DOMAIN_VRAM,
|
||||
false, ttm_bo_type_kernel,
|
||||
false, true,
|
||||
&gobj);
|
||||
if (ret) {
|
||||
printk(KERN_ERR "failed to allocate framebuffer (%d)\n",
|
||||
|
|
|
@ -99,6 +99,13 @@ static void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state)
|
|||
}
|
||||
}
|
||||
|
||||
/* switch the pads to ddc mode */
|
||||
if (ASIC_IS_DCE3(rdev) && rec->hw_capable) {
|
||||
temp = RREG32(rec->mask_clk_reg);
|
||||
temp &= ~(1 << 16);
|
||||
WREG32(rec->mask_clk_reg, temp);
|
||||
}
|
||||
|
||||
/* clear the output pin values */
|
||||
temp = RREG32(rec->a_clk_reg) & ~rec->a_clk_mask;
|
||||
WREG32(rec->a_clk_reg, temp);
|
||||
|
|
|
@ -121,11 +121,12 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
|
|||
* chips. Disable MSI on them for now.
|
||||
*/
|
||||
if ((rdev->family >= CHIP_RV380) &&
|
||||
(!(rdev->flags & RADEON_IS_IGP))) {
|
||||
(!(rdev->flags & RADEON_IS_IGP)) &&
|
||||
(!(rdev->flags & RADEON_IS_AGP))) {
|
||||
int ret = pci_enable_msi(rdev->pdev);
|
||||
if (!ret) {
|
||||
rdev->msi_enabled = 1;
|
||||
DRM_INFO("radeon: using MSI.\n");
|
||||
dev_info(rdev->dev, "radeon: using MSI.\n");
|
||||
}
|
||||
}
|
||||
rdev->irq.installed = true;
|
||||
|
|
|
@ -161,6 +161,7 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
|
|||
DRM_DEBUG_KMS("tiling config is r6xx+ only!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
case RADEON_INFO_WANT_HYPERZ:
|
||||
/* The "value" here is both an input and output parameter.
|
||||
* If the input value is 1, filp requests hyper-z access.
|
||||
|
@ -323,45 +324,45 @@ KMS_INVALID_IOCTL(radeon_surface_free_kms)
|
|||
|
||||
|
||||
struct drm_ioctl_desc radeon_ioctls_kms[] = {
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_INIT, radeon_cp_init_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_START, radeon_cp_start_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_STOP, radeon_cp_stop_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_RESET, radeon_cp_reset_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_IDLE, radeon_cp_idle_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_RESUME, radeon_cp_resume_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_RESET, radeon_engine_reset_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_FULLSCREEN, radeon_fullscreen_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_SWAP, radeon_cp_swap_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CLEAR, radeon_cp_clear_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_VERTEX, radeon_cp_vertex_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_INDICES, radeon_cp_indices_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_TEXTURE, radeon_cp_texture_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_STIPPLE, radeon_cp_stipple_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_INDIRECT, radeon_cp_indirect_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_VERTEX2, radeon_cp_vertex2_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CMDBUF, radeon_cp_cmdbuf_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GETPARAM, radeon_cp_getparam_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_FLIP, radeon_cp_flip_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_ALLOC, radeon_mem_alloc_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_FREE, radeon_mem_free_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_INIT_HEAP, radeon_mem_init_heap_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_IRQ_EMIT, radeon_irq_emit_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_IRQ_WAIT, radeon_irq_wait_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_SETPARAM, radeon_cp_setparam_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_SURF_ALLOC, radeon_surface_alloc_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_SURF_FREE, radeon_surface_free_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, radeon_cp_init_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_START, radeon_cp_start_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, radeon_cp_stop_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, radeon_cp_reset_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, radeon_cp_idle_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, radeon_cp_resume_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_RESET, radeon_engine_reset_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, radeon_fullscreen_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_SWAP, radeon_cp_swap_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CLEAR, radeon_cp_clear_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_VERTEX, radeon_cp_vertex_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_INDICES, radeon_cp_indices_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, radeon_cp_texture_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, radeon_cp_stipple_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, radeon_cp_indirect_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, radeon_cp_vertex2_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, radeon_cp_cmdbuf_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, radeon_cp_getparam_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_FLIP, radeon_cp_flip_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_ALLOC, radeon_mem_alloc_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_FREE, radeon_mem_free_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, radeon_mem_init_heap_kms, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, radeon_irq_emit_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, radeon_irq_wait_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, radeon_cp_setparam_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, radeon_surface_alloc_kms, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, radeon_surface_free_kms, DRM_AUTH),
|
||||
/* KMS */
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_INFO, radeon_gem_info_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_CREATE, radeon_gem_create_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_MMAP, radeon_gem_mmap_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_SET_DOMAIN, radeon_gem_set_domain_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_PREAD, radeon_gem_pread_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_PWRITE, radeon_gem_pwrite_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_WAIT_IDLE, radeon_gem_wait_idle_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CS, radeon_cs_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_INFO, radeon_info_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_INFO, radeon_gem_info_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_CREATE, radeon_gem_create_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_MMAP, radeon_gem_mmap_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_DOMAIN, radeon_gem_set_domain_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_PREAD, radeon_gem_pread_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_PWRITE, radeon_gem_pwrite_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_WAIT_IDLE, radeon_gem_wait_idle_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CS, radeon_cs_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_INFO, radeon_info_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH|DRM_UNLOCKED),
|
||||
};
|
||||
int radeon_max_kms_ioctl = DRM_ARRAY_SIZE(radeon_ioctls_kms);
|
||||
|
|
|
@ -272,7 +272,7 @@ static uint8_t radeon_compute_pll_gain(uint16_t ref_freq, uint16_t ref_div,
|
|||
if (!ref_div)
|
||||
return 1;
|
||||
|
||||
vcoFreq = ((unsigned)ref_freq & fb_div) / ref_div;
|
||||
vcoFreq = ((unsigned)ref_freq * fb_div) / ref_div;
|
||||
|
||||
/*
|
||||
* This is horribly crude: the VCO frequency range is divided into
|
||||
|
|
|
@ -1345,7 +1345,7 @@ static struct radeon_encoder_ext_tmds *radeon_legacy_get_ext_tmds_info(struct ra
|
|||
}
|
||||
|
||||
void
|
||||
radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t supported_device)
|
||||
radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_enum, uint32_t supported_device)
|
||||
{
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct drm_encoder *encoder;
|
||||
|
@ -1354,7 +1354,7 @@ radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t
|
|||
/* see if we already added it */
|
||||
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
|
||||
radeon_encoder = to_radeon_encoder(encoder);
|
||||
if (radeon_encoder->encoder_id == encoder_id) {
|
||||
if (radeon_encoder->encoder_enum == encoder_enum) {
|
||||
radeon_encoder->devices |= supported_device;
|
||||
return;
|
||||
}
|
||||
|
@ -1374,7 +1374,8 @@ radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t
|
|||
|
||||
radeon_encoder->enc_priv = NULL;
|
||||
|
||||
radeon_encoder->encoder_id = encoder_id;
|
||||
radeon_encoder->encoder_enum = encoder_enum;
|
||||
radeon_encoder->encoder_id = (encoder_enum & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT;
|
||||
radeon_encoder->devices = supported_device;
|
||||
radeon_encoder->rmx_type = RMX_OFF;
|
||||
|
||||
|
|
|
@ -342,6 +342,7 @@ struct radeon_atom_ss {
|
|||
};
|
||||
|
||||
struct radeon_encoder_atom_dig {
|
||||
bool linkb;
|
||||
/* atom dig */
|
||||
bool coherent_mode;
|
||||
int dig_encoder; /* -1 disabled, 0 DIGA, 1 DIGB */
|
||||
|
@ -360,6 +361,7 @@ struct radeon_encoder_atom_dac {
|
|||
|
||||
struct radeon_encoder {
|
||||
struct drm_encoder base;
|
||||
uint32_t encoder_enum;
|
||||
uint32_t encoder_id;
|
||||
uint32_t devices;
|
||||
uint32_t active_device;
|
||||
|
@ -378,7 +380,6 @@ struct radeon_encoder {
|
|||
|
||||
struct radeon_connector_atom_dig {
|
||||
uint32_t igp_lane_info;
|
||||
bool linkb;
|
||||
/* displayport */
|
||||
struct radeon_i2c_chan *dp_i2c_bus;
|
||||
u8 dpcd[8];
|
||||
|
|
|
@ -226,6 +226,11 @@ static void radeon_pm_set_clocks(struct radeon_device *rdev)
|
|||
{
|
||||
int i;
|
||||
|
||||
/* no need to take locks, etc. if nothing's going to change */
|
||||
if ((rdev->pm.requested_clock_mode_index == rdev->pm.current_clock_mode_index) &&
|
||||
(rdev->pm.requested_power_state_index == rdev->pm.current_power_state_index))
|
||||
return;
|
||||
|
||||
mutex_lock(&rdev->ddev->struct_mutex);
|
||||
mutex_lock(&rdev->vram_mutex);
|
||||
mutex_lock(&rdev->cp.mutex);
|
||||
|
|
|
@ -3228,34 +3228,34 @@ void radeon_driver_postclose(struct drm_device *dev, struct drm_file *file_priv)
|
|||
}
|
||||
|
||||
struct drm_ioctl_desc radeon_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_INIT, radeon_cp_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_START, radeon_cp_start, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_STOP, radeon_cp_stop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_RESET, radeon_cp_reset, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_IDLE, radeon_cp_idle, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CP_RESUME, radeon_cp_resume, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_RESET, radeon_engine_reset, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_FULLSCREEN, radeon_fullscreen, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_SWAP, radeon_cp_swap, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CLEAR, radeon_cp_clear, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_VERTEX, radeon_cp_vertex, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_INDICES, radeon_cp_indices, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_TEXTURE, radeon_cp_texture, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_STIPPLE, radeon_cp_stipple, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_INDIRECT, radeon_cp_indirect, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_VERTEX2, radeon_cp_vertex2, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CMDBUF, radeon_cp_cmdbuf, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_GETPARAM, radeon_cp_getparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_FLIP, radeon_cp_flip, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_ALLOC, radeon_mem_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_FREE, radeon_mem_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_INIT_HEAP, radeon_mem_init_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_IRQ_EMIT, radeon_irq_emit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_IRQ_WAIT, radeon_irq_wait, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_SETPARAM, radeon_cp_setparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_SURF_ALLOC, radeon_surface_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_SURF_FREE, radeon_surface_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_RADEON_CS, r600_cs_legacy_ioctl, DRM_AUTH)
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_INIT, radeon_cp_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_START, radeon_cp_start, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_STOP, radeon_cp_stop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_RESET, radeon_cp_reset, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_IDLE, radeon_cp_idle, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CP_RESUME, radeon_cp_resume, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_RESET, radeon_engine_reset, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_FULLSCREEN, radeon_fullscreen, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_SWAP, radeon_cp_swap, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CLEAR, radeon_cp_clear, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_VERTEX, radeon_cp_vertex, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_INDICES, radeon_cp_indices, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_TEXTURE, radeon_cp_texture, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_STIPPLE, radeon_cp_stipple, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_INDIRECT, radeon_cp_indirect, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_VERTEX2, radeon_cp_vertex2, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CMDBUF, radeon_cp_cmdbuf, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_GETPARAM, radeon_cp_getparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_FLIP, radeon_cp_flip, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_ALLOC, radeon_mem_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_FREE, radeon_mem_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_INIT_HEAP, radeon_mem_init_heap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_IRQ_EMIT, radeon_irq_emit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_IRQ_WAIT, radeon_irq_wait, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_SETPARAM, radeon_cp_setparam, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_SURF_ALLOC, radeon_surface_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_SURF_FREE, radeon_surface_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(RADEON_CS, r600_cs_legacy_ioctl, DRM_AUTH)
|
||||
};
|
||||
|
||||
int radeon_max_ioctl = DRM_ARRAY_SIZE(radeon_ioctls);
|
||||
|
|
|
@ -1082,10 +1082,10 @@ void savage_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv)
|
|||
}
|
||||
|
||||
struct drm_ioctl_desc savage_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_SAVAGE_BCI_INIT, savage_bci_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_SAVAGE_BCI_CMDBUF, savage_bci_cmdbuf, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_SAVAGE_BCI_EVENT_EMIT, savage_bci_event_emit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_SAVAGE_BCI_EVENT_WAIT, savage_bci_event_wait, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(SAVAGE_BCI_INIT, savage_bci_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(SAVAGE_BCI_CMDBUF, savage_bci_cmdbuf, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(SAVAGE_BCI_EVENT_EMIT, savage_bci_event_emit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(SAVAGE_BCI_EVENT_WAIT, savage_bci_event_wait, DRM_AUTH),
|
||||
};
|
||||
|
||||
int savage_max_ioctl = DRM_ARRAY_SIZE(savage_ioctls);
|
||||
|
|
|
@ -320,12 +320,12 @@ void sis_reclaim_buffers_locked(struct drm_device *dev,
|
|||
}
|
||||
|
||||
struct drm_ioctl_desc sis_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_SIS_FB_ALLOC, sis_fb_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_SIS_FB_FREE, sis_drm_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_SIS_AGP_INIT, sis_ioctl_agp_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_SIS_AGP_ALLOC, sis_ioctl_agp_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_SIS_AGP_FREE, sis_drm_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_SIS_FB_INIT, sis_fb_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(SIS_FB_ALLOC, sis_fb_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(SIS_FB_FREE, sis_drm_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(SIS_AGP_INIT, sis_ioctl_agp_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF_DRV(SIS_AGP_ALLOC, sis_ioctl_agp_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(SIS_AGP_FREE, sis_drm_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(SIS_FB_INIT, sis_fb_init, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY),
|
||||
};
|
||||
|
||||
int sis_max_ioctl = DRM_ARRAY_SIZE(sis_ioctls);
|
||||
|
|
|
@ -722,20 +722,20 @@ static int via_cmdbuf_size(struct drm_device *dev, void *data, struct drm_file *
|
|||
}
|
||||
|
||||
struct drm_ioctl_desc via_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_VIA_ALLOCMEM, via_mem_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_FREEMEM, via_mem_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_AGP_INIT, via_agp_init, DRM_AUTH|DRM_MASTER),
|
||||
DRM_IOCTL_DEF(DRM_VIA_FB_INIT, via_fb_init, DRM_AUTH|DRM_MASTER),
|
||||
DRM_IOCTL_DEF(DRM_VIA_MAP_INIT, via_map_init, DRM_AUTH|DRM_MASTER),
|
||||
DRM_IOCTL_DEF(DRM_VIA_DEC_FUTEX, via_decoder_futex, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_DMA_INIT, via_dma_init, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_CMDBUFFER, via_cmdbuffer, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_FLUSH, via_flush_ioctl, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_PCICMD, via_pci_cmdbuffer, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_CMDBUF_SIZE, via_cmdbuf_size, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_WAIT_IRQ, via_wait_irq, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_DMA_BLIT, via_dma_blit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_VIA_BLIT_SYNC, via_dma_blit_sync, DRM_AUTH)
|
||||
DRM_IOCTL_DEF_DRV(VIA_ALLOCMEM, via_mem_alloc, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_FREEMEM, via_mem_free, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_AGP_INIT, via_agp_init, DRM_AUTH|DRM_MASTER),
|
||||
DRM_IOCTL_DEF_DRV(VIA_FB_INIT, via_fb_init, DRM_AUTH|DRM_MASTER),
|
||||
DRM_IOCTL_DEF_DRV(VIA_MAP_INIT, via_map_init, DRM_AUTH|DRM_MASTER),
|
||||
DRM_IOCTL_DEF_DRV(VIA_DEC_FUTEX, via_decoder_futex, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_DMA_INIT, via_dma_init, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_CMDBUFFER, via_cmdbuffer, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_FLUSH, via_flush_ioctl, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_PCICMD, via_pci_cmdbuffer, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_CMDBUF_SIZE, via_cmdbuf_size, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_WAIT_IRQ, via_wait_irq, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_DMA_BLIT, via_dma_blit, DRM_AUTH),
|
||||
DRM_IOCTL_DEF_DRV(VIA_BLIT_SYNC, via_dma_blit_sync, DRM_AUTH)
|
||||
};
|
||||
|
||||
int via_max_ioctl = DRM_ARRAY_SIZE(via_ioctls);
|
||||
|
|
|
@ -99,47 +99,47 @@
|
|||
*/
|
||||
|
||||
#define VMW_IOCTL_DEF(ioctl, func, flags) \
|
||||
[DRM_IOCTL_NR(ioctl) - DRM_COMMAND_BASE] = {ioctl, flags, func}
|
||||
[DRM_IOCTL_NR(DRM_IOCTL_##ioctl) - DRM_COMMAND_BASE] = {DRM_##ioctl, flags, func, DRM_IOCTL_##ioctl}
|
||||
|
||||
/**
|
||||
* Ioctl definitions.
|
||||
*/
|
||||
|
||||
static struct drm_ioctl_desc vmw_ioctls[] = {
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_GET_PARAM, vmw_getparam_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_GET_PARAM, vmw_getparam_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_ALLOC_DMABUF, vmw_dmabuf_alloc_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_ALLOC_DMABUF, vmw_dmabuf_alloc_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_UNREF_DMABUF, vmw_dmabuf_unref_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_UNREF_DMABUF, vmw_dmabuf_unref_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_CURSOR_BYPASS,
|
||||
VMW_IOCTL_DEF(VMW_CURSOR_BYPASS,
|
||||
vmw_kms_cursor_bypass_ioctl,
|
||||
DRM_MASTER | DRM_CONTROL_ALLOW | DRM_UNLOCKED),
|
||||
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_CONTROL_STREAM, vmw_overlay_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_CONTROL_STREAM, vmw_overlay_ioctl,
|
||||
DRM_MASTER | DRM_CONTROL_ALLOW | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_CLAIM_STREAM, vmw_stream_claim_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_CLAIM_STREAM, vmw_stream_claim_ioctl,
|
||||
DRM_MASTER | DRM_CONTROL_ALLOW | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_UNREF_STREAM, vmw_stream_unref_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_UNREF_STREAM, vmw_stream_unref_ioctl,
|
||||
DRM_MASTER | DRM_CONTROL_ALLOW | DRM_UNLOCKED),
|
||||
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_CREATE_CONTEXT, vmw_context_define_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_CREATE_CONTEXT, vmw_context_define_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_UNREF_CONTEXT, vmw_context_destroy_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_UNREF_CONTEXT, vmw_context_destroy_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_CREATE_SURFACE, vmw_surface_define_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_CREATE_SURFACE, vmw_surface_define_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_UNREF_SURFACE, vmw_surface_destroy_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_UNREF_SURFACE, vmw_surface_destroy_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_REF_SURFACE, vmw_surface_reference_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_REF_SURFACE, vmw_surface_reference_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_EXECBUF, vmw_execbuf_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_EXECBUF, vmw_execbuf_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_FIFO_DEBUG, vmw_fifo_debug_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_FIFO_DEBUG, vmw_fifo_debug_ioctl,
|
||||
DRM_AUTH | DRM_ROOT_ONLY | DRM_MASTER | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_FENCE_WAIT, vmw_fence_wait_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_FENCE_WAIT, vmw_fence_wait_ioctl,
|
||||
DRM_AUTH | DRM_UNLOCKED),
|
||||
VMW_IOCTL_DEF(DRM_IOCTL_VMW_UPDATE_LAYOUT, vmw_kms_update_layout_ioctl,
|
||||
VMW_IOCTL_DEF(VMW_UPDATE_LAYOUT, vmw_kms_update_layout_ioctl,
|
||||
DRM_MASTER | DRM_CONTROL_ALLOW | DRM_UNLOCKED)
|
||||
};
|
||||
|
||||
|
|
|
@ -36,12 +36,13 @@ config ISDN_DRV_AVMB1_T1ISA
|
|||
|
||||
config ISDN_DRV_AVMB1_B1PCMCIA
|
||||
tristate "AVM B1/M1/M2 PCMCIA support"
|
||||
depends on PCMCIA
|
||||
help
|
||||
Enable support for the PCMCIA version of the AVM B1 card.
|
||||
|
||||
config ISDN_DRV_AVMB1_AVM_CS
|
||||
tristate "AVM B1/M1/M2 PCMCIA cs module"
|
||||
depends on ISDN_DRV_AVMB1_B1PCMCIA && PCMCIA
|
||||
depends on ISDN_DRV_AVMB1_B1PCMCIA
|
||||
help
|
||||
Enable the PCMCIA client driver for the AVM B1/M1/M2
|
||||
PCMCIA cards.
|
||||
|
|
|
@ -928,6 +928,16 @@ config SMC91X
|
|||
The module will be called smc91x. If you want to compile it as a
|
||||
module, say M here and read <file:Documentation/kbuild/modules.txt>.
|
||||
|
||||
config PXA168_ETH
|
||||
tristate "Marvell pxa168 ethernet support"
|
||||
depends on CPU_PXA168
|
||||
select PHYLIB
|
||||
help
|
||||
This driver supports the pxa168 Ethernet ports.
|
||||
|
||||
To compile this driver as a module, choose M here. The module
|
||||
will be called pxa168_eth.
|
||||
|
||||
config NET_NETX
|
||||
tristate "NetX Ethernet support"
|
||||
select MII
|
||||
|
|
|
@ -244,6 +244,7 @@ obj-$(CONFIG_MYRI10GE) += myri10ge/
|
|||
obj-$(CONFIG_SMC91X) += smc91x.o
|
||||
obj-$(CONFIG_SMC911X) += smc911x.o
|
||||
obj-$(CONFIG_SMSC911X) += smsc911x.o
|
||||
obj-$(CONFIG_PXA168_ETH) += pxa168_eth.o
|
||||
obj-$(CONFIG_BFIN_MAC) += bfin_mac.o
|
||||
obj-$(CONFIG_DM9000) += dm9000.o
|
||||
obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
* (you will need to reboot afterwards) */
|
||||
/* #define BNX2X_STOP_ON_ERROR */
|
||||
|
||||
#define DRV_MODULE_VERSION "1.52.53-3"
|
||||
#define DRV_MODULE_RELDATE "2010/18/04"
|
||||
#define DRV_MODULE_VERSION "1.52.53-4"
|
||||
#define DRV_MODULE_RELDATE "2010/16/08"
|
||||
#define BNX2X_BC_VER 0x040200
|
||||
|
||||
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
|
||||
|
|
|
@ -4328,10 +4328,12 @@ static int bnx2x_init_port(struct bnx2x *bp)
|
|||
val |= aeu_gpio_mask;
|
||||
REG_WR(bp, offset, val);
|
||||
}
|
||||
bp->port.need_hw_lock = 1;
|
||||
break;
|
||||
|
||||
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101:
|
||||
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727:
|
||||
bp->port.need_hw_lock = 1;
|
||||
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101:
|
||||
/* add SPIO 5 to group 0 */
|
||||
{
|
||||
u32 reg_addr = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 :
|
||||
|
@ -4341,7 +4343,10 @@ static int bnx2x_init_port(struct bnx2x *bp)
|
|||
REG_WR(bp, reg_addr, val);
|
||||
}
|
||||
break;
|
||||
|
||||
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072:
|
||||
case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073:
|
||||
bp->port.need_hw_lock = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -936,12 +936,14 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
|
|||
ew32(IMC, 0xffffffff);
|
||||
icr = er32(ICR);
|
||||
|
||||
/* Install any alternate MAC address into RAR0 */
|
||||
ret_val = e1000_check_alt_mac_addr_generic(hw);
|
||||
if (ret_val)
|
||||
return ret_val;
|
||||
if (hw->mac.type == e1000_82571) {
|
||||
/* Install any alternate MAC address into RAR0 */
|
||||
ret_val = e1000_check_alt_mac_addr_generic(hw);
|
||||
if (ret_val)
|
||||
return ret_val;
|
||||
|
||||
e1000e_set_laa_state_82571(hw, true);
|
||||
e1000e_set_laa_state_82571(hw, true);
|
||||
}
|
||||
|
||||
/* Reinitialize the 82571 serdes link state machine */
|
||||
if (hw->phy.media_type == e1000_media_type_internal_serdes)
|
||||
|
@ -1618,14 +1620,16 @@ static s32 e1000_read_mac_addr_82571(struct e1000_hw *hw)
|
|||
{
|
||||
s32 ret_val = 0;
|
||||
|
||||
/*
|
||||
* If there's an alternate MAC address place it in RAR0
|
||||
* so that it will override the Si installed default perm
|
||||
* address.
|
||||
*/
|
||||
ret_val = e1000_check_alt_mac_addr_generic(hw);
|
||||
if (ret_val)
|
||||
goto out;
|
||||
if (hw->mac.type == e1000_82571) {
|
||||
/*
|
||||
* If there's an alternate MAC address place it in RAR0
|
||||
* so that it will override the Si installed default perm
|
||||
* address.
|
||||
*/
|
||||
ret_val = e1000_check_alt_mac_addr_generic(hw);
|
||||
if (ret_val)
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret_val = e1000_read_mac_addr_generic(hw);
|
||||
|
||||
|
@ -1833,6 +1837,7 @@ struct e1000_info e1000_82573_info = {
|
|||
| FLAG_HAS_SMART_POWER_DOWN
|
||||
| FLAG_HAS_AMT
|
||||
| FLAG_HAS_SWSM_ON_LOAD,
|
||||
.flags2 = FLAG2_DISABLE_ASPM_L1,
|
||||
.pba = 20,
|
||||
.max_hw_frame_size = ETH_FRAME_LEN + ETH_FCS_LEN,
|
||||
.get_variants = e1000_get_variants_82571,
|
||||
|
|
|
@ -621,6 +621,7 @@
|
|||
#define E1000_FLASH_UPDATES 2000
|
||||
|
||||
/* NVM Word Offsets */
|
||||
#define NVM_COMPAT 0x0003
|
||||
#define NVM_ID_LED_SETTINGS 0x0004
|
||||
#define NVM_INIT_CONTROL2_REG 0x000F
|
||||
#define NVM_INIT_CONTROL3_PORT_B 0x0014
|
||||
|
@ -643,6 +644,9 @@
|
|||
/* Mask bits for fields in Word 0x1a of the NVM */
|
||||
#define NVM_WORD1A_ASPM_MASK 0x000C
|
||||
|
||||
/* Mask bits for fields in Word 0x03 of the EEPROM */
|
||||
#define NVM_COMPAT_LOM 0x0800
|
||||
|
||||
/* For checksumming, the sum of all words in the NVM should equal 0xBABA. */
|
||||
#define NVM_SUM 0xBABA
|
||||
|
||||
|
|
|
@ -183,6 +183,16 @@ s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw)
|
|||
u16 offset, nvm_alt_mac_addr_offset, nvm_data;
|
||||
u8 alt_mac_addr[ETH_ALEN];
|
||||
|
||||
ret_val = e1000_read_nvm(hw, NVM_COMPAT, 1, &nvm_data);
|
||||
if (ret_val)
|
||||
goto out;
|
||||
|
||||
/* Check for LOM (vs. NIC) or one of two valid mezzanine cards */
|
||||
if (!((nvm_data & NVM_COMPAT_LOM) ||
|
||||
(hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_DUAL) ||
|
||||
(hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_QUAD)))
|
||||
goto out;
|
||||
|
||||
ret_val = e1000_read_nvm(hw, NVM_ALT_MAC_ADDR_PTR, 1,
|
||||
&nvm_alt_mac_addr_offset);
|
||||
if (ret_val) {
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#include <asm/io.h>
|
||||
|
||||
#define DRV_NAME "ehea"
|
||||
#define DRV_VERSION "EHEA_0105"
|
||||
#define DRV_VERSION "EHEA_0106"
|
||||
|
||||
/* eHEA capability flags */
|
||||
#define DLPAR_PORT_ADD_REM 1
|
||||
|
@ -400,6 +400,7 @@ struct ehea_port_res {
|
|||
u32 poll_counter;
|
||||
struct net_lro_mgr lro_mgr;
|
||||
struct net_lro_desc lro_desc[MAX_LRO_DESCRIPTORS];
|
||||
int sq_restart_flag;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -776,6 +776,53 @@ static int ehea_proc_rwqes(struct net_device *dev,
|
|||
return processed;
|
||||
}
|
||||
|
||||
#define SWQE_RESTART_CHECK 0xdeadbeaff00d0000ull
|
||||
|
||||
static void reset_sq_restart_flag(struct ehea_port *port)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) {
|
||||
struct ehea_port_res *pr = &port->port_res[i];
|
||||
pr->sq_restart_flag = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void check_sqs(struct ehea_port *port)
|
||||
{
|
||||
struct ehea_swqe *swqe;
|
||||
int swqe_index;
|
||||
int i, k;
|
||||
|
||||
for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) {
|
||||
struct ehea_port_res *pr = &port->port_res[i];
|
||||
k = 0;
|
||||
swqe = ehea_get_swqe(pr->qp, &swqe_index);
|
||||
memset(swqe, 0, SWQE_HEADER_SIZE);
|
||||
atomic_dec(&pr->swqe_avail);
|
||||
|
||||
swqe->tx_control |= EHEA_SWQE_PURGE;
|
||||
swqe->wr_id = SWQE_RESTART_CHECK;
|
||||
swqe->tx_control |= EHEA_SWQE_SIGNALLED_COMPLETION;
|
||||
swqe->tx_control |= EHEA_SWQE_IMM_DATA_PRESENT;
|
||||
swqe->immediate_data_length = 80;
|
||||
|
||||
ehea_post_swqe(pr->qp, swqe);
|
||||
|
||||
while (pr->sq_restart_flag == 0) {
|
||||
msleep(5);
|
||||
if (++k == 100) {
|
||||
ehea_error("HW/SW queues out of sync");
|
||||
ehea_schedule_port_reset(pr->port);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static struct ehea_cqe *ehea_proc_cqes(struct ehea_port_res *pr, int my_quota)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
@ -793,6 +840,13 @@ static struct ehea_cqe *ehea_proc_cqes(struct ehea_port_res *pr, int my_quota)
|
|||
|
||||
cqe_counter++;
|
||||
rmb();
|
||||
|
||||
if (cqe->wr_id == SWQE_RESTART_CHECK) {
|
||||
pr->sq_restart_flag = 1;
|
||||
swqe_av++;
|
||||
break;
|
||||
}
|
||||
|
||||
if (cqe->status & EHEA_CQE_STAT_ERR_MASK) {
|
||||
ehea_error("Bad send completion status=0x%04X",
|
||||
cqe->status);
|
||||
|
@ -2675,8 +2729,10 @@ static void ehea_flush_sq(struct ehea_port *port)
|
|||
int k = 0;
|
||||
while (atomic_read(&pr->swqe_avail) < swqe_max) {
|
||||
msleep(5);
|
||||
if (++k == 20)
|
||||
if (++k == 20) {
|
||||
ehea_error("WARNING: sq not flushed completely");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2917,6 +2973,7 @@ static void ehea_rereg_mrs(struct work_struct *work)
|
|||
port_napi_disable(port);
|
||||
mutex_unlock(&port->port_lock);
|
||||
}
|
||||
reset_sq_restart_flag(port);
|
||||
}
|
||||
|
||||
/* Unregister old memory region */
|
||||
|
@ -2951,6 +3008,7 @@ static void ehea_rereg_mrs(struct work_struct *work)
|
|||
mutex_lock(&port->port_lock);
|
||||
port_napi_enable(port);
|
||||
ret = ehea_restart_qps(dev);
|
||||
check_sqs(port);
|
||||
if (!ret)
|
||||
netif_wake_queue(dev);
|
||||
mutex_unlock(&port->port_lock);
|
||||
|
|
|
@ -1113,7 +1113,8 @@ static int ibmveth_change_mtu(struct net_device *dev, int new_mtu)
|
|||
struct ibmveth_adapter *adapter = netdev_priv(dev);
|
||||
struct vio_dev *viodev = adapter->vdev;
|
||||
int new_mtu_oh = new_mtu + IBMVETH_BUFF_OH;
|
||||
int i;
|
||||
int i, rc;
|
||||
int need_restart = 0;
|
||||
|
||||
if (new_mtu < IBMVETH_MAX_MTU)
|
||||
return -EINVAL;
|
||||
|
@ -1127,35 +1128,32 @@ static int ibmveth_change_mtu(struct net_device *dev, int new_mtu)
|
|||
|
||||
/* Deactivate all the buffer pools so that the next loop can activate
|
||||
only the buffer pools necessary to hold the new MTU */
|
||||
for (i = 0; i < IbmVethNumBufferPools; i++)
|
||||
if (adapter->rx_buff_pool[i].active) {
|
||||
ibmveth_free_buffer_pool(adapter,
|
||||
&adapter->rx_buff_pool[i]);
|
||||
adapter->rx_buff_pool[i].active = 0;
|
||||
}
|
||||
if (netif_running(adapter->netdev)) {
|
||||
need_restart = 1;
|
||||
adapter->pool_config = 1;
|
||||
ibmveth_close(adapter->netdev);
|
||||
adapter->pool_config = 0;
|
||||
}
|
||||
|
||||
/* Look for an active buffer pool that can hold the new MTU */
|
||||
for(i = 0; i<IbmVethNumBufferPools; i++) {
|
||||
adapter->rx_buff_pool[i].active = 1;
|
||||
|
||||
if (new_mtu_oh < adapter->rx_buff_pool[i].buff_size) {
|
||||
if (netif_running(adapter->netdev)) {
|
||||
adapter->pool_config = 1;
|
||||
ibmveth_close(adapter->netdev);
|
||||
adapter->pool_config = 0;
|
||||
dev->mtu = new_mtu;
|
||||
vio_cmo_set_dev_desired(viodev,
|
||||
ibmveth_get_desired_dma
|
||||
(viodev));
|
||||
return ibmveth_open(adapter->netdev);
|
||||
}
|
||||
dev->mtu = new_mtu;
|
||||
vio_cmo_set_dev_desired(viodev,
|
||||
ibmveth_get_desired_dma
|
||||
(viodev));
|
||||
if (need_restart) {
|
||||
return ibmveth_open(adapter->netdev);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (need_restart && (rc = ibmveth_open(adapter->netdev)))
|
||||
return rc;
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -902,8 +902,8 @@ temac_poll_controller(struct net_device *ndev)
|
|||
disable_irq(lp->tx_irq);
|
||||
disable_irq(lp->rx_irq);
|
||||
|
||||
ll_temac_rx_irq(lp->tx_irq, lp);
|
||||
ll_temac_tx_irq(lp->rx_irq, lp);
|
||||
ll_temac_rx_irq(lp->tx_irq, ndev);
|
||||
ll_temac_tx_irq(lp->rx_irq, ndev);
|
||||
|
||||
enable_irq(lp->tx_irq);
|
||||
enable_irq(lp->rx_irq);
|
||||
|
|
|
@ -53,8 +53,8 @@
|
|||
|
||||
#define _NETXEN_NIC_LINUX_MAJOR 4
|
||||
#define _NETXEN_NIC_LINUX_MINOR 0
|
||||
#define _NETXEN_NIC_LINUX_SUBVERSION 73
|
||||
#define NETXEN_NIC_LINUX_VERSIONID "4.0.73"
|
||||
#define _NETXEN_NIC_LINUX_SUBVERSION 74
|
||||
#define NETXEN_NIC_LINUX_VERSIONID "4.0.74"
|
||||
|
||||
#define NETXEN_VERSION_CODE(a, b, c) (((a) << 24) + ((b) << 16) + (c))
|
||||
#define _major(v) (((v) >> 24) & 0xff)
|
||||
|
|
|
@ -1805,8 +1805,6 @@ netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ringid,
|
|||
netxen_ctx_msg msg = 0;
|
||||
struct list_head *head;
|
||||
|
||||
spin_lock(&rds_ring->lock);
|
||||
|
||||
producer = rds_ring->producer;
|
||||
|
||||
head = &rds_ring->free_list;
|
||||
|
@ -1853,8 +1851,6 @@ netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ringid,
|
|||
NETXEN_RCV_PRODUCER_OFFSET), msg);
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock(&rds_ring->lock);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -2032,8 +2032,6 @@ struct net_device_stats *netxen_nic_get_stats(struct net_device *netdev)
|
|||
struct netxen_adapter *adapter = netdev_priv(netdev);
|
||||
struct net_device_stats *stats = &netdev->stats;
|
||||
|
||||
memset(stats, 0, sizeof(*stats));
|
||||
|
||||
stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts;
|
||||
stats->tx_packets = adapter->stats.xmitfinished;
|
||||
stats->rx_bytes = adapter->stats.rxbytes;
|
||||
|
|
1666
drivers/net/pxa168_eth.c
Normal file
1666
drivers/net/pxa168_eth.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1983,8 +1983,6 @@ static struct net_device_stats *qlcnic_get_stats(struct net_device *netdev)
|
|||
struct qlcnic_adapter *adapter = netdev_priv(netdev);
|
||||
struct net_device_stats *stats = &netdev->stats;
|
||||
|
||||
memset(stats, 0, sizeof(*stats));
|
||||
|
||||
stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts;
|
||||
stats->tx_packets = adapter->stats.xmitfinished;
|
||||
stats->rx_bytes = adapter->stats.rxbytes + adapter->stats.lrobytes;
|
||||
|
|
|
@ -1437,7 +1437,7 @@ static const struct net_device_ops sh_eth_netdev_ops = {
|
|||
|
||||
static int sh_eth_drv_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret, i, devno = 0;
|
||||
int ret, devno = 0;
|
||||
struct resource *res;
|
||||
struct net_device *ndev = NULL;
|
||||
struct sh_eth_private *mdp;
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
#define USB_PRODUCT_IPHONE 0x1290
|
||||
#define USB_PRODUCT_IPHONE_3G 0x1292
|
||||
#define USB_PRODUCT_IPHONE_3GS 0x1294
|
||||
#define USB_PRODUCT_IPHONE_4 0x1297
|
||||
|
||||
#define IPHETH_USBINTF_CLASS 255
|
||||
#define IPHETH_USBINTF_SUBCLASS 253
|
||||
|
@ -92,6 +93,10 @@ static struct usb_device_id ipheth_table[] = {
|
|||
USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_3GS,
|
||||
IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
|
||||
IPHETH_USBINTF_PROTO) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(
|
||||
USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4,
|
||||
IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
|
||||
IPHETH_USBINTF_PROTO) },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, ipheth_table);
|
||||
|
|
|
@ -732,7 +732,7 @@ static int adm8211_rf_set_channel(struct ieee80211_hw *dev, unsigned int chan)
|
|||
|
||||
/* Nothing to do for ADMtek BBP */
|
||||
} else if (priv->bbp_type != ADM8211_TYPE_ADMTEK)
|
||||
wiphy_debug(dev->wiphy, "unsupported bbp type %d\n",
|
||||
wiphy_debug(dev->wiphy, "unsupported BBP type %d\n",
|
||||
priv->bbp_type);
|
||||
|
||||
ADM8211_RESTORE();
|
||||
|
@ -1032,7 +1032,7 @@ static int adm8211_hw_init_bbp(struct ieee80211_hw *dev)
|
|||
break;
|
||||
}
|
||||
} else
|
||||
wiphy_debug(dev->wiphy, "unsupported bbp %d\n", priv->bbp_type);
|
||||
wiphy_debug(dev->wiphy, "unsupported BBP %d\n", priv->bbp_type);
|
||||
|
||||
ADM8211_CSR_WRITE(SYNRF, 0);
|
||||
|
||||
|
@ -1525,7 +1525,7 @@ static int adm8211_start(struct ieee80211_hw *dev)
|
|||
retval = request_irq(priv->pdev->irq, adm8211_interrupt,
|
||||
IRQF_SHARED, "adm8211", dev);
|
||||
if (retval) {
|
||||
wiphy_err(dev->wiphy, "failed to register irq handler\n");
|
||||
wiphy_err(dev->wiphy, "failed to register IRQ handler\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
@ -1902,7 +1902,7 @@ static int __devinit adm8211_probe(struct pci_dev *pdev,
|
|||
goto err_free_eeprom;
|
||||
}
|
||||
|
||||
wiphy_info(dev->wiphy, "hwaddr %pm, rev 0x%02x\n",
|
||||
wiphy_info(dev->wiphy, "hwaddr %pM, Rev 0x%02x\n",
|
||||
dev->wiphy->perm_addr, pdev->revision);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -655,7 +655,7 @@ static int at76_get_hw_config(struct at76_priv *priv)
|
|||
exit:
|
||||
kfree(hwcfg);
|
||||
if (ret < 0)
|
||||
wiphy_err(priv->hw->wiphy, "cannot get hw config (error %d)\n",
|
||||
wiphy_err(priv->hw->wiphy, "cannot get HW Config (error %d)\n",
|
||||
ret);
|
||||
|
||||
return ret;
|
||||
|
@ -960,7 +960,7 @@ static void at76_dump_mib_mac_addr(struct at76_priv *priv)
|
|||
sizeof(struct mib_mac_addr));
|
||||
if (ret < 0) {
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"at76_get_mib (mac_addr) failed: %d\n", ret);
|
||||
"at76_get_mib (MAC_ADDR) failed: %d\n", ret);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
@ -989,7 +989,7 @@ static void at76_dump_mib_mac_wep(struct at76_priv *priv)
|
|||
sizeof(struct mib_mac_wep));
|
||||
if (ret < 0) {
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"at76_get_mib (mac_wep) failed: %d\n", ret);
|
||||
"at76_get_mib (MAC_WEP) failed: %d\n", ret);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
@ -1026,7 +1026,7 @@ static void at76_dump_mib_mac_mgmt(struct at76_priv *priv)
|
|||
sizeof(struct mib_mac_mgmt));
|
||||
if (ret < 0) {
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"at76_get_mib (mac_mgmt) failed: %d\n", ret);
|
||||
"at76_get_mib (MAC_MGMT) failed: %d\n", ret);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
@ -1062,7 +1062,7 @@ static void at76_dump_mib_mac(struct at76_priv *priv)
|
|||
ret = at76_get_mib(priv->udev, MIB_MAC, m, sizeof(struct mib_mac));
|
||||
if (ret < 0) {
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"at76_get_mib (mac) failed: %d\n", ret);
|
||||
"at76_get_mib (MAC) failed: %d\n", ret);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
@ -1099,7 +1099,7 @@ static void at76_dump_mib_phy(struct at76_priv *priv)
|
|||
ret = at76_get_mib(priv->udev, MIB_PHY, m, sizeof(struct mib_phy));
|
||||
if (ret < 0) {
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"at76_get_mib (phy) failed: %d\n", ret);
|
||||
"at76_get_mib (PHY) failed: %d\n", ret);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
@ -1132,7 +1132,7 @@ static void at76_dump_mib_local(struct at76_priv *priv)
|
|||
ret = at76_get_mib(priv->udev, MIB_LOCAL, m, sizeof(struct mib_local));
|
||||
if (ret < 0) {
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"at76_get_mib (local) failed: %d\n", ret);
|
||||
"at76_get_mib (LOCAL) failed: %d\n", ret);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
@ -1158,7 +1158,7 @@ static void at76_dump_mib_mdomain(struct at76_priv *priv)
|
|||
sizeof(struct mib_mdomain));
|
||||
if (ret < 0) {
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"at76_get_mib (mdomain) failed: %d\n", ret);
|
||||
"at76_get_mib (MDOMAIN) failed: %d\n", ret);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
@ -1229,7 +1229,7 @@ static int at76_submit_rx_urb(struct at76_priv *priv)
|
|||
struct sk_buff *skb = priv->rx_skb;
|
||||
|
||||
if (!priv->rx_urb) {
|
||||
wiphy_err(priv->hw->wiphy, "%s: priv->rx_urb is null\n",
|
||||
wiphy_err(priv->hw->wiphy, "%s: priv->rx_urb is NULL\n",
|
||||
__func__);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
@ -1792,7 +1792,7 @@ static int at76_mac80211_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
|
|||
wiphy_err(priv->hw->wiphy, "error in tx submit urb: %d\n", ret);
|
||||
if (ret == -EINVAL)
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"-einval: tx urb %p hcpriv %p complete %p\n",
|
||||
"-EINVAL: tx urb %p hcpriv %p complete %p\n",
|
||||
priv->tx_urb,
|
||||
priv->tx_urb->hcpriv, priv->tx_urb->complete);
|
||||
}
|
||||
|
@ -2310,7 +2310,7 @@ static int at76_init_new_device(struct at76_priv *priv,
|
|||
|
||||
priv->mac80211_registered = 1;
|
||||
|
||||
wiphy_info(priv->hw->wiphy, "usb %s, mac %pm, firmware %d.%d.%d-%d\n",
|
||||
wiphy_info(priv->hw->wiphy, "USB %s, MAC %pM, firmware %d.%d.%d-%d\n",
|
||||
dev_name(&interface->dev), priv->mac_addr,
|
||||
priv->fw_version.major, priv->fw_version.minor,
|
||||
priv->fw_version.patch, priv->fw_version.build);
|
||||
|
|
|
@ -245,7 +245,7 @@ static void __ar9170_dump_txstats(struct ar9170 *ar)
|
|||
{
|
||||
int i;
|
||||
|
||||
wiphy_debug(ar->hw->wiphy, "qos queue stats\n");
|
||||
wiphy_debug(ar->hw->wiphy, "QoS queue stats\n");
|
||||
|
||||
for (i = 0; i < __AR9170_NUM_TXQ; i++)
|
||||
wiphy_debug(ar->hw->wiphy,
|
||||
|
@ -387,7 +387,7 @@ static struct sk_buff *ar9170_get_queued_skb(struct ar9170 *ar,
|
|||
if (mac && compare_ether_addr(ieee80211_get_DA(hdr), mac)) {
|
||||
#ifdef AR9170_QUEUE_DEBUG
|
||||
wiphy_debug(ar->hw->wiphy,
|
||||
"skip frame => da %pm != %pm\n",
|
||||
"skip frame => DA %pM != %pM\n",
|
||||
mac, ieee80211_get_DA(hdr));
|
||||
ar9170_print_txheader(ar, skb);
|
||||
#endif /* AR9170_QUEUE_DEBUG */
|
||||
|
|
|
@ -2723,14 +2723,6 @@ static void __ipw2100_rx_process(struct ipw2100_priv *priv)
|
|||
|
||||
packet = &priv->rx_buffers[i];
|
||||
|
||||
/* Sync the DMA for the STATUS buffer so CPU is sure to get
|
||||
* the correct values */
|
||||
pci_dma_sync_single_for_cpu(priv->pci_dev,
|
||||
sq->nic +
|
||||
sizeof(struct ipw2100_status) * i,
|
||||
sizeof(struct ipw2100_status),
|
||||
PCI_DMA_FROMDEVICE);
|
||||
|
||||
/* Sync the DMA for the RX buffer so CPU is sure to get
|
||||
* the correct values */
|
||||
pci_dma_sync_single_for_cpu(priv->pci_dev, packet->dma_addr,
|
||||
|
|
|
@ -265,7 +265,7 @@ struct iwl_cfg iwl1000_bgn_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 128,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -297,7 +297,7 @@ struct iwl_cfg iwl1000_bg_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 128,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
|
|
@ -2731,7 +2731,7 @@ static struct iwl_cfg iwl3945_bg_cfg = {
|
|||
.led_compensation = 64,
|
||||
.broken_powersave = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.tx_power_by_driver = true,
|
||||
};
|
||||
|
@ -2752,7 +2752,7 @@ static struct iwl_cfg iwl3945_abg_cfg = {
|
|||
.led_compensation = 64,
|
||||
.broken_powersave = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.tx_power_by_driver = true,
|
||||
};
|
||||
|
|
|
@ -2322,7 +2322,7 @@ struct iwl_cfg iwl4965_agn_cfg = {
|
|||
.led_compensation = 61,
|
||||
.chain_noise_num_beacons = IWL4965_CAL_NUM_BEACONS,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.temperature_kelvin = true,
|
||||
.max_event_log_size = 512,
|
||||
.tx_power_by_driver = true,
|
||||
|
|
|
@ -510,7 +510,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
|
|||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -541,7 +541,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
|
|||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -570,7 +570,7 @@ struct iwl_cfg iwl5100_abg_cfg = {
|
|||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -601,7 +601,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
|
|||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -632,7 +632,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
|
|||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -663,7 +663,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
|
|||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -693,7 +693,7 @@ struct iwl_cfg iwl5150_abg_cfg = {
|
|||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
|
|
@ -388,7 +388,7 @@ struct iwl_cfg iwl6000g2a_2agn_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -424,7 +424,7 @@ struct iwl_cfg iwl6000g2a_2abg_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
.chain_noise_calib_by_driver = true,
|
||||
|
@ -459,7 +459,7 @@ struct iwl_cfg iwl6000g2a_2bg_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
.chain_noise_calib_by_driver = true,
|
||||
|
@ -496,7 +496,7 @@ struct iwl_cfg iwl6000g2b_2agn_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
.chain_noise_calib_by_driver = true,
|
||||
|
@ -532,7 +532,7 @@ struct iwl_cfg iwl6000g2b_2abg_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
.chain_noise_calib_by_driver = true,
|
||||
|
@ -570,7 +570,7 @@ struct iwl_cfg iwl6000g2b_2bgn_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
.chain_noise_calib_by_driver = true,
|
||||
|
@ -606,7 +606,7 @@ struct iwl_cfg iwl6000g2b_2bg_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
.chain_noise_calib_by_driver = true,
|
||||
|
@ -644,7 +644,7 @@ struct iwl_cfg iwl6000g2b_bgn_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
.chain_noise_calib_by_driver = true,
|
||||
|
@ -680,7 +680,7 @@ struct iwl_cfg iwl6000g2b_bg_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
|
||||
.max_event_log_size = 512,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
.chain_noise_calib_by_driver = true,
|
||||
|
@ -721,7 +721,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 1024,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -756,7 +756,7 @@ struct iwl_cfg iwl6000i_2abg_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 1024,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -791,7 +791,7 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 1024,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -828,7 +828,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1500,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 1024,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -866,7 +866,7 @@ struct iwl_cfg iwl6050g2_bgn_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1500,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 1024,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -902,7 +902,7 @@ struct iwl_cfg iwl6050_2abg_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1500,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 1024,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
@ -940,7 +940,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
|
|||
.support_ct_kill_exit = true,
|
||||
.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
|
||||
.chain_noise_scale = 1000,
|
||||
.monitor_recover_period = IWL_MONITORING_PERIOD,
|
||||
.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
|
||||
.max_event_log_size = 1024,
|
||||
.ucode_tracing = true,
|
||||
.sensitivity_calib_by_driver = true,
|
||||
|
|
|
@ -3667,6 +3667,49 @@ out_exit:
|
|||
IWL_DEBUG_MAC80211(priv, "leave\n");
|
||||
}
|
||||
|
||||
static void iwlagn_configure_filter(struct ieee80211_hw *hw,
|
||||
unsigned int changed_flags,
|
||||
unsigned int *total_flags,
|
||||
u64 multicast)
|
||||
{
|
||||
struct iwl_priv *priv = hw->priv;
|
||||
__le32 filter_or = 0, filter_nand = 0;
|
||||
|
||||
#define CHK(test, flag) do { \
|
||||
if (*total_flags & (test)) \
|
||||
filter_or |= (flag); \
|
||||
else \
|
||||
filter_nand |= (flag); \
|
||||
} while (0)
|
||||
|
||||
IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n",
|
||||
changed_flags, *total_flags);
|
||||
|
||||
CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK);
|
||||
CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK);
|
||||
CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK);
|
||||
|
||||
#undef CHK
|
||||
|
||||
mutex_lock(&priv->mutex);
|
||||
|
||||
priv->staging_rxon.filter_flags &= ~filter_nand;
|
||||
priv->staging_rxon.filter_flags |= filter_or;
|
||||
|
||||
iwlcore_commit_rxon(priv);
|
||||
|
||||
mutex_unlock(&priv->mutex);
|
||||
|
||||
/*
|
||||
* Receiving all multicast frames is always enabled by the
|
||||
* default flags setup in iwl_connection_init_rx_config()
|
||||
* since we currently do not support programming multicast
|
||||
* filters into the device.
|
||||
*/
|
||||
*total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
|
||||
FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
|
||||
}
|
||||
|
||||
static void iwl_mac_flush(struct ieee80211_hw *hw, bool drop)
|
||||
{
|
||||
struct iwl_priv *priv = hw->priv;
|
||||
|
@ -3867,7 +3910,7 @@ static struct ieee80211_ops iwl_hw_ops = {
|
|||
.add_interface = iwl_mac_add_interface,
|
||||
.remove_interface = iwl_mac_remove_interface,
|
||||
.config = iwl_mac_config,
|
||||
.configure_filter = iwl_configure_filter,
|
||||
.configure_filter = iwlagn_configure_filter,
|
||||
.set_key = iwl_mac_set_key,
|
||||
.update_tkip_key = iwl_mac_update_tkip_key,
|
||||
.conf_tx = iwl_mac_conf_tx,
|
||||
|
|
|
@ -1328,51 +1328,6 @@ out:
|
|||
EXPORT_SYMBOL(iwl_apm_init);
|
||||
|
||||
|
||||
|
||||
void iwl_configure_filter(struct ieee80211_hw *hw,
|
||||
unsigned int changed_flags,
|
||||
unsigned int *total_flags,
|
||||
u64 multicast)
|
||||
{
|
||||
struct iwl_priv *priv = hw->priv;
|
||||
__le32 filter_or = 0, filter_nand = 0;
|
||||
|
||||
#define CHK(test, flag) do { \
|
||||
if (*total_flags & (test)) \
|
||||
filter_or |= (flag); \
|
||||
else \
|
||||
filter_nand |= (flag); \
|
||||
} while (0)
|
||||
|
||||
IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n",
|
||||
changed_flags, *total_flags);
|
||||
|
||||
CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK);
|
||||
CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK);
|
||||
CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK);
|
||||
|
||||
#undef CHK
|
||||
|
||||
mutex_lock(&priv->mutex);
|
||||
|
||||
priv->staging_rxon.filter_flags &= ~filter_nand;
|
||||
priv->staging_rxon.filter_flags |= filter_or;
|
||||
|
||||
iwlcore_commit_rxon(priv);
|
||||
|
||||
mutex_unlock(&priv->mutex);
|
||||
|
||||
/*
|
||||
* Receiving all multicast frames is always enabled by the
|
||||
* default flags setup in iwl_connection_init_rx_config()
|
||||
* since we currently do not support programming multicast
|
||||
* filters into the device.
|
||||
*/
|
||||
*total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
|
||||
FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
|
||||
}
|
||||
EXPORT_SYMBOL(iwl_configure_filter);
|
||||
|
||||
int iwl_set_hw_params(struct iwl_priv *priv)
|
||||
{
|
||||
priv->hw_params.max_rxq_size = RX_QUEUE_SIZE;
|
||||
|
|
|
@ -372,9 +372,6 @@ int iwl_set_decrypted_flag(struct iwl_priv *priv,
|
|||
u32 decrypt_res,
|
||||
struct ieee80211_rx_status *stats);
|
||||
void iwl_irq_handle_error(struct iwl_priv *priv);
|
||||
void iwl_configure_filter(struct ieee80211_hw *hw,
|
||||
unsigned int changed_flags,
|
||||
unsigned int *total_flags, u64 multicast);
|
||||
int iwl_set_hw_params(struct iwl_priv *priv);
|
||||
void iwl_post_associate(struct iwl_priv *priv, struct ieee80211_vif *vif);
|
||||
void iwl_bss_info_changed(struct ieee80211_hw *hw,
|
||||
|
|
|
@ -1049,7 +1049,8 @@ struct iwl_event_log {
|
|||
#define IWL_DELAY_NEXT_FORCE_FW_RELOAD (HZ*5)
|
||||
|
||||
/* timer constants use to monitor and recover stuck tx queues in mSecs */
|
||||
#define IWL_MONITORING_PERIOD (1000)
|
||||
#define IWL_DEF_MONITORING_PERIOD (1000)
|
||||
#define IWL_LONG_MONITORING_PERIOD (5000)
|
||||
#define IWL_ONE_HUNDRED_MSECS (100)
|
||||
#define IWL_SIXTY_SECS (60000)
|
||||
|
||||
|
|
|
@ -3391,6 +3391,55 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void iwl3945_configure_filter(struct ieee80211_hw *hw,
|
||||
unsigned int changed_flags,
|
||||
unsigned int *total_flags,
|
||||
u64 multicast)
|
||||
{
|
||||
struct iwl_priv *priv = hw->priv;
|
||||
__le32 filter_or = 0, filter_nand = 0;
|
||||
|
||||
#define CHK(test, flag) do { \
|
||||
if (*total_flags & (test)) \
|
||||
filter_or |= (flag); \
|
||||
else \
|
||||
filter_nand |= (flag); \
|
||||
} while (0)
|
||||
|
||||
IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n",
|
||||
changed_flags, *total_flags);
|
||||
|
||||
CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK);
|
||||
CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK);
|
||||
CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK);
|
||||
|
||||
#undef CHK
|
||||
|
||||
mutex_lock(&priv->mutex);
|
||||
|
||||
priv->staging_rxon.filter_flags &= ~filter_nand;
|
||||
priv->staging_rxon.filter_flags |= filter_or;
|
||||
|
||||
/*
|
||||
* Committing directly here breaks for some reason,
|
||||
* but we'll eventually commit the filter flags
|
||||
* change anyway.
|
||||
*/
|
||||
|
||||
mutex_unlock(&priv->mutex);
|
||||
|
||||
/*
|
||||
* Receiving all multicast frames is always enabled by the
|
||||
* default flags setup in iwl_connection_init_rx_config()
|
||||
* since we currently do not support programming multicast
|
||||
* filters into the device.
|
||||
*/
|
||||
*total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
|
||||
FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* sysfs attributes
|
||||
|
@ -3796,7 +3845,7 @@ static struct ieee80211_ops iwl3945_hw_ops = {
|
|||
.add_interface = iwl_mac_add_interface,
|
||||
.remove_interface = iwl_mac_remove_interface,
|
||||
.config = iwl_mac_config,
|
||||
.configure_filter = iwl_configure_filter,
|
||||
.configure_filter = iwl3945_configure_filter,
|
||||
.set_key = iwl3945_mac_set_key,
|
||||
.conf_tx = iwl_mac_conf_tx,
|
||||
.reset_tsf = iwl_mac_reset_tsf,
|
||||
|
|
|
@ -486,7 +486,7 @@ static bool mac80211_hwsim_tx_frame(struct ieee80211_hw *hw,
|
|||
struct ieee80211_rx_status rx_status;
|
||||
|
||||
if (data->idle) {
|
||||
wiphy_debug(hw->wiphy, "trying to tx when idle - reject\n");
|
||||
wiphy_debug(hw->wiphy, "Trying to TX when idle - reject\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -910,14 +910,14 @@ static int mwl8k_rxq_init(struct ieee80211_hw *hw, int index)
|
|||
|
||||
rxq->rxd = pci_alloc_consistent(priv->pdev, size, &rxq->rxd_dma);
|
||||
if (rxq->rxd == NULL) {
|
||||
wiphy_err(hw->wiphy, "failed to alloc rx descriptors\n");
|
||||
wiphy_err(hw->wiphy, "failed to alloc RX descriptors\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
memset(rxq->rxd, 0, size);
|
||||
|
||||
rxq->buf = kmalloc(MWL8K_RX_DESCS * sizeof(*rxq->buf), GFP_KERNEL);
|
||||
if (rxq->buf == NULL) {
|
||||
wiphy_err(hw->wiphy, "failed to alloc rx skbuff list\n");
|
||||
wiphy_err(hw->wiphy, "failed to alloc RX skbuff list\n");
|
||||
pci_free_consistent(priv->pdev, size, rxq->rxd, rxq->rxd_dma);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -1145,14 +1145,14 @@ static int mwl8k_txq_init(struct ieee80211_hw *hw, int index)
|
|||
|
||||
txq->txd = pci_alloc_consistent(priv->pdev, size, &txq->txd_dma);
|
||||
if (txq->txd == NULL) {
|
||||
wiphy_err(hw->wiphy, "failed to alloc tx descriptors\n");
|
||||
wiphy_err(hw->wiphy, "failed to alloc TX descriptors\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
memset(txq->txd, 0, size);
|
||||
|
||||
txq->skb = kmalloc(MWL8K_TX_DESCS * sizeof(*txq->skb), GFP_KERNEL);
|
||||
if (txq->skb == NULL) {
|
||||
wiphy_err(hw->wiphy, "failed to alloc tx skbuff list\n");
|
||||
wiphy_err(hw->wiphy, "failed to alloc TX skbuff list\n");
|
||||
pci_free_consistent(priv->pdev, size, txq->txd, txq->txd_dma);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -1573,7 +1573,7 @@ static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)
|
|||
PCI_DMA_BIDIRECTIONAL);
|
||||
|
||||
if (!timeout) {
|
||||
wiphy_err(hw->wiphy, "command %s timeout after %u ms\n",
|
||||
wiphy_err(hw->wiphy, "Command %s timeout after %u ms\n",
|
||||
mwl8k_cmd_name(cmd->code, buf, sizeof(buf)),
|
||||
MWL8K_CMD_TIMEOUT_MS);
|
||||
rc = -ETIMEDOUT;
|
||||
|
@ -1584,11 +1584,11 @@ static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)
|
|||
|
||||
rc = cmd->result ? -EINVAL : 0;
|
||||
if (rc)
|
||||
wiphy_err(hw->wiphy, "command %s error 0x%x\n",
|
||||
wiphy_err(hw->wiphy, "Command %s error 0x%x\n",
|
||||
mwl8k_cmd_name(cmd->code, buf, sizeof(buf)),
|
||||
le16_to_cpu(cmd->result));
|
||||
else if (ms > 2000)
|
||||
wiphy_notice(hw->wiphy, "command %s took %d ms\n",
|
||||
wiphy_notice(hw->wiphy, "Command %s took %d ms\n",
|
||||
mwl8k_cmd_name(cmd->code,
|
||||
buf, sizeof(buf)),
|
||||
ms);
|
||||
|
@ -3210,7 +3210,7 @@ static int mwl8k_start(struct ieee80211_hw *hw)
|
|||
rc = request_irq(priv->pdev->irq, mwl8k_interrupt,
|
||||
IRQF_SHARED, MWL8K_NAME, hw);
|
||||
if (rc) {
|
||||
wiphy_err(hw->wiphy, "failed to register irq handler\n");
|
||||
wiphy_err(hw->wiphy, "failed to register IRQ handler\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
|
@ -3926,7 +3926,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
|
|||
|
||||
priv->sram = pci_iomap(pdev, 0, 0x10000);
|
||||
if (priv->sram == NULL) {
|
||||
wiphy_err(hw->wiphy, "cannot map device sram\n");
|
||||
wiphy_err(hw->wiphy, "Cannot map device SRAM\n");
|
||||
goto err_iounmap;
|
||||
}
|
||||
|
||||
|
@ -3938,7 +3938,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
|
|||
if (priv->regs == NULL) {
|
||||
priv->regs = pci_iomap(pdev, 2, 0x10000);
|
||||
if (priv->regs == NULL) {
|
||||
wiphy_err(hw->wiphy, "cannot map device registers\n");
|
||||
wiphy_err(hw->wiphy, "Cannot map device registers\n");
|
||||
goto err_iounmap;
|
||||
}
|
||||
}
|
||||
|
@ -3950,14 +3950,14 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
|
|||
/* Ask userland hotplug daemon for the device firmware */
|
||||
rc = mwl8k_request_firmware(priv);
|
||||
if (rc) {
|
||||
wiphy_err(hw->wiphy, "firmware files not found\n");
|
||||
wiphy_err(hw->wiphy, "Firmware files not found\n");
|
||||
goto err_stop_firmware;
|
||||
}
|
||||
|
||||
/* Load firmware into hardware */
|
||||
rc = mwl8k_load_firmware(hw);
|
||||
if (rc) {
|
||||
wiphy_err(hw->wiphy, "cannot start firmware\n");
|
||||
wiphy_err(hw->wiphy, "Cannot start firmware\n");
|
||||
goto err_stop_firmware;
|
||||
}
|
||||
|
||||
|
@ -4047,7 +4047,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
|
|||
rc = request_irq(priv->pdev->irq, mwl8k_interrupt,
|
||||
IRQF_SHARED, MWL8K_NAME, hw);
|
||||
if (rc) {
|
||||
wiphy_err(hw->wiphy, "failed to register irq handler\n");
|
||||
wiphy_err(hw->wiphy, "failed to register IRQ handler\n");
|
||||
goto err_free_queues;
|
||||
}
|
||||
|
||||
|
@ -4067,7 +4067,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
|
|||
rc = mwl8k_cmd_get_hw_spec_sta(hw);
|
||||
}
|
||||
if (rc) {
|
||||
wiphy_err(hw->wiphy, "cannot initialise firmware\n");
|
||||
wiphy_err(hw->wiphy, "Cannot initialise firmware\n");
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
|
@ -4081,14 +4081,14 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
|
|||
/* Turn radio off */
|
||||
rc = mwl8k_cmd_radio_disable(hw);
|
||||
if (rc) {
|
||||
wiphy_err(hw->wiphy, "cannot disable\n");
|
||||
wiphy_err(hw->wiphy, "Cannot disable\n");
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
/* Clear MAC address */
|
||||
rc = mwl8k_cmd_set_mac_addr(hw, NULL, "\x00\x00\x00\x00\x00\x00");
|
||||
if (rc) {
|
||||
wiphy_err(hw->wiphy, "cannot clear mac address\n");
|
||||
wiphy_err(hw->wiphy, "Cannot clear MAC address\n");
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
|
@ -4098,7 +4098,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,
|
|||
|
||||
rc = ieee80211_register_hw(hw);
|
||||
if (rc) {
|
||||
wiphy_err(hw->wiphy, "cannot register device\n");
|
||||
wiphy_err(hw->wiphy, "Cannot register device\n");
|
||||
goto err_free_queues;
|
||||
}
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@ static int p54_generate_band(struct ieee80211_hw *dev,
|
|||
}
|
||||
|
||||
if (j == 0) {
|
||||
wiphy_err(dev->wiphy, "disabling totally damaged %d GHz band\n",
|
||||
wiphy_err(dev->wiphy, "Disabling totally damaged %d GHz band\n",
|
||||
(band == IEEE80211_BAND_2GHZ) ? 2 : 5);
|
||||
|
||||
ret = -ENODATA;
|
||||
|
@ -695,12 +695,12 @@ int p54_parse_eeprom(struct ieee80211_hw *dev, void *eeprom, int len)
|
|||
u8 perm_addr[ETH_ALEN];
|
||||
|
||||
wiphy_warn(dev->wiphy,
|
||||
"invalid hwaddr! using randomly generated mac addr\n");
|
||||
"Invalid hwaddr! Using randomly generated MAC addr\n");
|
||||
random_ether_addr(perm_addr);
|
||||
SET_IEEE80211_PERM_ADDR(dev, perm_addr);
|
||||
}
|
||||
|
||||
wiphy_info(dev->wiphy, "hwaddr %pm, mac:isl38%02x rf:%s\n",
|
||||
wiphy_info(dev->wiphy, "hwaddr %pM, MAC:isl38%02x RF:%s\n",
|
||||
dev->wiphy->perm_addr, priv->version,
|
||||
p54_rf_chips[priv->rxhw]);
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ int p54_parse_firmware(struct ieee80211_hw *dev, const struct firmware *fw)
|
|||
|
||||
if (fw_version)
|
||||
wiphy_info(priv->hw->wiphy,
|
||||
"fw rev %s - softmac protocol %x.%x\n",
|
||||
"FW rev %s - Softmac protocol %x.%x\n",
|
||||
fw_version, priv->fw_var >> 8, priv->fw_var & 0xff);
|
||||
|
||||
if (priv->fw_var < 0x500)
|
||||
|
|
|
@ -58,7 +58,7 @@ static void p54_update_leds(struct work_struct *work)
|
|||
err = p54_set_leds(priv);
|
||||
if (err && net_ratelimit())
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"failed to update leds (%d).\n", err);
|
||||
"failed to update LEDs (%d).\n", err);
|
||||
|
||||
if (rerun)
|
||||
ieee80211_queue_delayed_work(priv->hw, &priv->led_work,
|
||||
|
@ -103,7 +103,7 @@ static int p54_register_led(struct p54_common *priv,
|
|||
err = led_classdev_register(wiphy_dev(priv->hw->wiphy), &led->led_dev);
|
||||
if (err)
|
||||
wiphy_err(priv->hw->wiphy,
|
||||
"failed to register %s led.\n", name);
|
||||
"Failed to register %s LED.\n", name);
|
||||
else
|
||||
led->registered = 1;
|
||||
|
||||
|
|
|
@ -466,7 +466,7 @@ static int p54p_open(struct ieee80211_hw *dev)
|
|||
P54P_READ(dev_int);
|
||||
|
||||
if (!wait_for_completion_interruptible_timeout(&priv->boot_comp, HZ)) {
|
||||
wiphy_err(dev->wiphy, "cannot boot firmware!\n");
|
||||
wiphy_err(dev->wiphy, "Cannot boot firmware!\n");
|
||||
p54p_stop(dev);
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
|
|
@ -540,7 +540,7 @@ static void p54_rx_trap(struct p54_common *priv, struct sk_buff *skb)
|
|||
case P54_TRAP_BEACON_TX:
|
||||
break;
|
||||
case P54_TRAP_RADAR:
|
||||
wiphy_info(priv->hw->wiphy, "radar (freq:%d mhz)\n", freq);
|
||||
wiphy_info(priv->hw->wiphy, "radar (freq:%d MHz)\n", freq);
|
||||
break;
|
||||
case P54_TRAP_NO_BEACON:
|
||||
if (priv->vif)
|
||||
|
|
|
@ -445,7 +445,7 @@ static int rtl8180_init_rx_ring(struct ieee80211_hw *dev)
|
|||
&priv->rx_ring_dma);
|
||||
|
||||
if (!priv->rx_ring || (unsigned long)priv->rx_ring & 0xFF) {
|
||||
wiphy_err(dev->wiphy, "cannot allocate rx ring\n");
|
||||
wiphy_err(dev->wiphy, "Cannot allocate RX ring\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
@ -502,7 +502,7 @@ static int rtl8180_init_tx_ring(struct ieee80211_hw *dev,
|
|||
|
||||
ring = pci_alloc_consistent(priv->pdev, sizeof(*ring) * entries, &dma);
|
||||
if (!ring || (unsigned long)ring & 0xFF) {
|
||||
wiphy_err(dev->wiphy, "cannot allocate tx ring (prio = %d)\n",
|
||||
wiphy_err(dev->wiphy, "Cannot allocate TX ring (prio = %d)\n",
|
||||
prio);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -568,7 +568,7 @@ static int rtl8180_start(struct ieee80211_hw *dev)
|
|||
ret = request_irq(priv->pdev->irq, rtl8180_interrupt,
|
||||
IRQF_SHARED, KBUILD_MODNAME, dev);
|
||||
if (ret) {
|
||||
wiphy_err(dev->wiphy, "failed to register irq handler\n");
|
||||
wiphy_err(dev->wiphy, "failed to register IRQ handler\n");
|
||||
goto err_free_rings;
|
||||
}
|
||||
|
||||
|
|
|
@ -573,7 +573,7 @@ static int rtl8187_cmd_reset(struct ieee80211_hw *dev)
|
|||
} while (--i);
|
||||
|
||||
if (!i) {
|
||||
wiphy_err(dev->wiphy, "reset timeout!\n");
|
||||
wiphy_err(dev->wiphy, "Reset timeout!\n");
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
|
@ -1526,7 +1526,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
|
|||
mutex_init(&priv->conf_mutex);
|
||||
skb_queue_head_init(&priv->b_tx_status.queue);
|
||||
|
||||
wiphy_info(dev->wiphy, "hwaddr %pm, %s v%d + %s, rfkill mask %d\n",
|
||||
wiphy_info(dev->wiphy, "hwaddr %pM, %s V%d + %s, rfkill mask %d\n",
|
||||
mac_addr, chip_name, priv->asic_rev, priv->rf->name,
|
||||
priv->rfkill_mask);
|
||||
|
||||
|
|
|
@ -366,7 +366,7 @@ static void rtl8225_rf_init(struct ieee80211_hw *dev)
|
|||
rtl8225_write(dev, 0x02, 0x044d);
|
||||
msleep(100);
|
||||
if (!(rtl8225_read(dev, 6) & (1 << 7)))
|
||||
wiphy_warn(dev->wiphy, "rf calibration failed! %x\n",
|
||||
wiphy_warn(dev->wiphy, "RF Calibration Failed! %x\n",
|
||||
rtl8225_read(dev, 6));
|
||||
}
|
||||
|
||||
|
@ -735,7 +735,7 @@ static void rtl8225z2_rf_init(struct ieee80211_hw *dev)
|
|||
rtl8225_write(dev, 0x02, 0x044D);
|
||||
msleep(100);
|
||||
if (!(rtl8225_read(dev, 6) & (1 << 7)))
|
||||
wiphy_warn(dev->wiphy, "rf calibration failed! %x\n",
|
||||
wiphy_warn(dev->wiphy, "RF Calibration Failed! %x\n",
|
||||
rtl8225_read(dev, 6));
|
||||
}
|
||||
|
||||
|
|
|
@ -486,10 +486,12 @@ config TOPSTAR_LAPTOP
|
|||
config ACPI_TOSHIBA
|
||||
tristate "Toshiba Laptop Extras"
|
||||
depends on ACPI
|
||||
depends on LEDS_CLASS
|
||||
depends on NEW_LEDS
|
||||
depends on BACKLIGHT_CLASS_DEVICE
|
||||
depends on INPUT
|
||||
depends on RFKILL || RFKILL = n
|
||||
select INPUT_POLLDEV
|
||||
select BACKLIGHT_CLASS_DEVICE
|
||||
---help---
|
||||
This driver adds support for access to certain system settings
|
||||
on "legacy free" Toshiba laptops. These laptops can be recognized by
|
||||
|
|
|
@ -79,12 +79,13 @@ struct bios_args {
|
|||
u32 command;
|
||||
u32 commandtype;
|
||||
u32 datasize;
|
||||
char *data;
|
||||
u32 data;
|
||||
};
|
||||
|
||||
struct bios_return {
|
||||
u32 sigpass;
|
||||
u32 return_code;
|
||||
u32 value;
|
||||
};
|
||||
|
||||
struct key_entry {
|
||||
|
@ -148,7 +149,7 @@ static struct platform_driver hp_wmi_driver = {
|
|||
* buffer = kzalloc(128, GFP_KERNEL);
|
||||
* ret = hp_wmi_perform_query(0x7, 0, buffer, 128)
|
||||
*/
|
||||
static int hp_wmi_perform_query(int query, int write, char *buffer,
|
||||
static int hp_wmi_perform_query(int query, int write, u32 *buffer,
|
||||
int buffersize)
|
||||
{
|
||||
struct bios_return bios_return;
|
||||
|
@ -159,7 +160,7 @@ static int hp_wmi_perform_query(int query, int write, char *buffer,
|
|||
.command = write ? 0x2 : 0x1,
|
||||
.commandtype = query,
|
||||
.datasize = buffersize,
|
||||
.data = buffer,
|
||||
.data = *buffer,
|
||||
};
|
||||
struct acpi_buffer input = { sizeof(struct bios_args), &args };
|
||||
struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
|
@ -177,29 +178,14 @@ static int hp_wmi_perform_query(int query, int write, char *buffer,
|
|||
|
||||
bios_return = *((struct bios_return *)obj->buffer.pointer);
|
||||
|
||||
if (bios_return.return_code) {
|
||||
printk(KERN_WARNING PREFIX "Query %d returned %d\n", query,
|
||||
bios_return.return_code);
|
||||
kfree(obj);
|
||||
return bios_return.return_code;
|
||||
}
|
||||
if (obj->buffer.length - sizeof(bios_return) > buffersize) {
|
||||
kfree(obj);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memset(buffer, 0, buffersize);
|
||||
memcpy(buffer,
|
||||
((char *)obj->buffer.pointer) + sizeof(struct bios_return),
|
||||
obj->buffer.length - sizeof(bios_return));
|
||||
kfree(obj);
|
||||
memcpy(buffer, &bios_return.value, sizeof(bios_return.value));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hp_wmi_display_state(void)
|
||||
{
|
||||
int state;
|
||||
int ret = hp_wmi_perform_query(HPWMI_DISPLAY_QUERY, 0, (char *)&state,
|
||||
int state = 0;
|
||||
int ret = hp_wmi_perform_query(HPWMI_DISPLAY_QUERY, 0, &state,
|
||||
sizeof(state));
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
@ -208,8 +194,8 @@ static int hp_wmi_display_state(void)
|
|||
|
||||
static int hp_wmi_hddtemp_state(void)
|
||||
{
|
||||
int state;
|
||||
int ret = hp_wmi_perform_query(HPWMI_HDDTEMP_QUERY, 0, (char *)&state,
|
||||
int state = 0;
|
||||
int ret = hp_wmi_perform_query(HPWMI_HDDTEMP_QUERY, 0, &state,
|
||||
sizeof(state));
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
@ -218,8 +204,8 @@ static int hp_wmi_hddtemp_state(void)
|
|||
|
||||
static int hp_wmi_als_state(void)
|
||||
{
|
||||
int state;
|
||||
int ret = hp_wmi_perform_query(HPWMI_ALS_QUERY, 0, (char *)&state,
|
||||
int state = 0;
|
||||
int ret = hp_wmi_perform_query(HPWMI_ALS_QUERY, 0, &state,
|
||||
sizeof(state));
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
@ -228,8 +214,8 @@ static int hp_wmi_als_state(void)
|
|||
|
||||
static int hp_wmi_dock_state(void)
|
||||
{
|
||||
int state;
|
||||
int ret = hp_wmi_perform_query(HPWMI_HARDWARE_QUERY, 0, (char *)&state,
|
||||
int state = 0;
|
||||
int ret = hp_wmi_perform_query(HPWMI_HARDWARE_QUERY, 0, &state,
|
||||
sizeof(state));
|
||||
|
||||
if (ret)
|
||||
|
@ -240,8 +226,8 @@ static int hp_wmi_dock_state(void)
|
|||
|
||||
static int hp_wmi_tablet_state(void)
|
||||
{
|
||||
int state;
|
||||
int ret = hp_wmi_perform_query(HPWMI_HARDWARE_QUERY, 0, (char *)&state,
|
||||
int state = 0;
|
||||
int ret = hp_wmi_perform_query(HPWMI_HARDWARE_QUERY, 0, &state,
|
||||
sizeof(state));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -256,7 +242,7 @@ static int hp_wmi_set_block(void *data, bool blocked)
|
|||
int ret;
|
||||
|
||||
ret = hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 1,
|
||||
(char *)&query, sizeof(query));
|
||||
&query, sizeof(query));
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
|
@ -268,10 +254,10 @@ static const struct rfkill_ops hp_wmi_rfkill_ops = {
|
|||
|
||||
static bool hp_wmi_get_sw_state(enum hp_wmi_radio r)
|
||||
{
|
||||
int wireless;
|
||||
int wireless = 0;
|
||||
int mask;
|
||||
hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 0,
|
||||
(char *)&wireless, sizeof(wireless));
|
||||
&wireless, sizeof(wireless));
|
||||
/* TBD: Pass error */
|
||||
|
||||
mask = 0x200 << (r * 8);
|
||||
|
@ -284,10 +270,10 @@ static bool hp_wmi_get_sw_state(enum hp_wmi_radio r)
|
|||
|
||||
static bool hp_wmi_get_hw_state(enum hp_wmi_radio r)
|
||||
{
|
||||
int wireless;
|
||||
int wireless = 0;
|
||||
int mask;
|
||||
hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 0,
|
||||
(char *)&wireless, sizeof(wireless));
|
||||
&wireless, sizeof(wireless));
|
||||
/* TBD: Pass error */
|
||||
|
||||
mask = 0x800 << (r * 8);
|
||||
|
@ -347,7 +333,7 @@ static ssize_t set_als(struct device *dev, struct device_attribute *attr,
|
|||
const char *buf, size_t count)
|
||||
{
|
||||
u32 tmp = simple_strtoul(buf, NULL, 10);
|
||||
int ret = hp_wmi_perform_query(HPWMI_ALS_QUERY, 1, (char *)&tmp,
|
||||
int ret = hp_wmi_perform_query(HPWMI_ALS_QUERY, 1, &tmp,
|
||||
sizeof(tmp));
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
@ -421,7 +407,7 @@ static void hp_wmi_notify(u32 value, void *context)
|
|||
static struct key_entry *key;
|
||||
union acpi_object *obj;
|
||||
u32 event_id, event_data;
|
||||
int key_code, ret;
|
||||
int key_code = 0, ret;
|
||||
u32 *location;
|
||||
acpi_status status;
|
||||
|
||||
|
@ -475,7 +461,7 @@ static void hp_wmi_notify(u32 value, void *context)
|
|||
break;
|
||||
case HPWMI_BEZEL_BUTTON:
|
||||
ret = hp_wmi_perform_query(HPWMI_HOTKEY_QUERY, 0,
|
||||
(char *)&key_code,
|
||||
&key_code,
|
||||
sizeof(key_code));
|
||||
if (ret)
|
||||
break;
|
||||
|
@ -578,9 +564,9 @@ static void cleanup_sysfs(struct platform_device *device)
|
|||
static int __devinit hp_wmi_bios_setup(struct platform_device *device)
|
||||
{
|
||||
int err;
|
||||
int wireless;
|
||||
int wireless = 0;
|
||||
|
||||
err = hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 0, (char *)&wireless,
|
||||
err = hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 0, &wireless,
|
||||
sizeof(wireless));
|
||||
if (err)
|
||||
return err;
|
||||
|
|
|
@ -142,7 +142,7 @@ fw-shipped-$(CONFIG_YAM) += yam/1200.bin yam/9600.bin
|
|||
fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
|
||||
|
||||
# Directories which we _might_ need to create, so we have a rule for them.
|
||||
firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(fw-external-y) $(fw-shipped-all))))
|
||||
firmware-dirs := $(sort $(addprefix $(objtree)/$(obj)/,$(dir $(fw-external-y) $(fw-shipped-all))))
|
||||
|
||||
quiet_cmd_mkdir = MKDIR $(patsubst $(objtree)/%,%,$@)
|
||||
cmd_mkdir = mkdir -p $@
|
||||
|
|
|
@ -305,14 +305,16 @@ struct drm_ioctl_desc {
|
|||
unsigned int cmd;
|
||||
int flags;
|
||||
drm_ioctl_t *func;
|
||||
unsigned int cmd_drv;
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a driver or general drm_ioctl_desc array entry for the given
|
||||
* ioctl, for use by drm_ioctl().
|
||||
*/
|
||||
#define DRM_IOCTL_DEF(ioctl, _func, _flags) \
|
||||
[DRM_IOCTL_NR(ioctl)] = {.cmd = ioctl, .func = _func, .flags = _flags}
|
||||
|
||||
#define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags) \
|
||||
[DRM_IOCTL_NR(DRM_##ioctl)] = {.cmd = DRM_##ioctl, .func = _func, .flags = _flags, .cmd_drv = DRM_IOCTL_##ioctl}
|
||||
|
||||
struct drm_magic_entry {
|
||||
struct list_head head;
|
||||
|
|
|
@ -264,20 +264,20 @@ typedef struct _drm_i830_sarea {
|
|||
#define DRM_I830_GETPARAM 0x0c
|
||||
#define DRM_I830_SETPARAM 0x0d
|
||||
|
||||
#define DRM_IOCTL_I830_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_INIT, drm_i830_init_t)
|
||||
#define DRM_IOCTL_I830_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_VERTEX, drm_i830_vertex_t)
|
||||
#define DRM_IOCTL_I830_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_CLEAR, drm_i830_clear_t)
|
||||
#define DRM_IOCTL_I830_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_FLUSH)
|
||||
#define DRM_IOCTL_I830_GETAGE DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_GETAGE)
|
||||
#define DRM_IOCTL_I830_GETBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_IOCTL_I830_GETBUF, drm_i830_dma_t)
|
||||
#define DRM_IOCTL_I830_SWAP DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_SWAP)
|
||||
#define DRM_IOCTL_I830_COPY DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_COPY, drm_i830_copy_t)
|
||||
#define DRM_IOCTL_I830_DOCOPY DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_DOCOPY)
|
||||
#define DRM_IOCTL_I830_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_IOCTL_I830_FLIP)
|
||||
#define DRM_IOCTL_I830_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_IOCTL_I830_IRQ_EMIT, drm_i830_irq_emit_t)
|
||||
#define DRM_IOCTL_I830_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_IOCTL_I830_IRQ_WAIT, drm_i830_irq_wait_t)
|
||||
#define DRM_IOCTL_I830_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_IOCTL_I830_GETPARAM, drm_i830_getparam_t)
|
||||
#define DRM_IOCTL_I830_SETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_IOCTL_I830_SETPARAM, drm_i830_setparam_t)
|
||||
#define DRM_IOCTL_I830_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I830_INIT, drm_i830_init_t)
|
||||
#define DRM_IOCTL_I830_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_I830_VERTEX, drm_i830_vertex_t)
|
||||
#define DRM_IOCTL_I830_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_I830_CLEAR, drm_i830_clear_t)
|
||||
#define DRM_IOCTL_I830_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I830_FLUSH)
|
||||
#define DRM_IOCTL_I830_GETAGE DRM_IO ( DRM_COMMAND_BASE + DRM_I830_GETAGE)
|
||||
#define DRM_IOCTL_I830_GETBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_I830_GETBUF, drm_i830_dma_t)
|
||||
#define DRM_IOCTL_I830_SWAP DRM_IO ( DRM_COMMAND_BASE + DRM_I830_SWAP)
|
||||
#define DRM_IOCTL_I830_COPY DRM_IOW( DRM_COMMAND_BASE + DRM_I830_COPY, drm_i830_copy_t)
|
||||
#define DRM_IOCTL_I830_DOCOPY DRM_IO ( DRM_COMMAND_BASE + DRM_I830_DOCOPY)
|
||||
#define DRM_IOCTL_I830_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I830_FLIP)
|
||||
#define DRM_IOCTL_I830_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I830_IRQ_EMIT, drm_i830_irq_emit_t)
|
||||
#define DRM_IOCTL_I830_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I830_IRQ_WAIT, drm_i830_irq_wait_t)
|
||||
#define DRM_IOCTL_I830_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I830_GETPARAM, drm_i830_getparam_t)
|
||||
#define DRM_IOCTL_I830_SETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I830_SETPARAM, drm_i830_setparam_t)
|
||||
|
||||
typedef struct _drm_i830_clear {
|
||||
int clear_color;
|
||||
|
|
|
@ -215,6 +215,7 @@ typedef struct _drm_i915_sarea {
|
|||
#define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
|
||||
#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
|
||||
#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t)
|
||||
#define DRM_IOCTL_I915_HWS_ADDR DRM_IOW(DRM_COMMAND_BASE + DRM_I915_HWS_ADDR, struct drm_i915_gem_init)
|
||||
#define DRM_IOCTL_I915_GEM_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init)
|
||||
#define DRM_IOCTL_I915_GEM_EXECBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer)
|
||||
#define DRM_IOCTL_I915_GEM_EXECBUFFER2 DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue