nouveau
15 years agonv30: more header name changes...
Ben Skeggs [Fri, 11 Jul 2008 16:24:54 +0000 (02:24 +1000)] 
nv30: more header name changes...

15 years agonv30: more bustage from header update
Ben Skeggs [Fri, 11 Jul 2008 16:15:08 +0000 (02:15 +1000)] 
nv30: more bustage from header update

15 years agonv30: un-change something that somehow changed in an earlier commit. oops!
Ben Skeggs [Fri, 11 Jul 2008 16:03:58 +0000 (02:03 +1000)] 
nv30: un-change something that somehow changed in an earlier commit. oops!

15 years agonv50: exa/xv share some stuff, punt it out to nv50_accel.[ch]
Ben Skeggs [Tue, 8 Jul 2008 02:28:18 +0000 (12:28 +1000)] 
nv50: exa/xv share some stuff, punt it out to nv50_accel.[ch]

15 years agonv50: Xv support
Ben Skeggs [Tue, 8 Jul 2008 02:09:09 +0000 (12:09 +1000)] 
nv50: Xv support

The NV12 YCbCr->RGB shader is hand-written just like the composite shaders,
hopefully correct!  I'll probably put a disasm next to each opcode at some
point so it doesn't look like just a bunch of magics.

You'll need to use a composite manager if you want to watch videos, we can't
render directly to the screen for the same reasons as mentioned in the
composite commit.  Though, a simple workaround is possible in the Xv case,
so that'll probably come at some point.  For now, PutImage() will fail with
BadMatch.

The Y and UV plane upload may not be 100% for what NV50 requires, I want to
rework all that at some point anyway.  For now, at least there's some form
of accelerated video to work with.

Enjoy :)

15 years agonv50: de-magic things before someone accuses me of being an NVIDIA employee
Ben Skeggs [Sun, 6 Jul 2008 10:38:44 +0000 (20:38 +1000)] 
nv50: de-magic things before someone accuses me of being an NVIDIA employee

15 years agonv50: exa composite
Ben Skeggs [Sat, 5 Jul 2008 15:30:21 +0000 (01:30 +1000)] 
nv50: exa composite

15 years agonv50: tile offscreen pixmaps
Ben Skeggs [Sat, 5 Jul 2008 15:21:39 +0000 (01:21 +1000)] 
nv50: tile offscreen pixmaps

Until someone figures out how to make the display engine scan out from
tiled surfaces things will be a bit painful.  Future commits for exa
composite and Xv will require the use of the 3D engine, which will *not*
render to linear surfaces.. a composite manager will probably be a must
for it to be usable.

I really don't want the NOUVEAU_MEM_TILE ioctl in the end, but we'll have
to deal with it until we can drop support for <xorg-server-1.5.  EXA driver
handled pixmaps are far far nicer :)

15 years agoexa: pass window coords to m2mf-based UTS/DFS
Ben Skeggs [Sat, 5 Jul 2008 14:57:08 +0000 (00:57 +1000)] 
exa: pass window coords to m2mf-based UTS/DFS

15 years agoxv: remove some disturbing abuses of buffer related things
Ben Skeggs [Sun, 6 Jul 2008 15:03:02 +0000 (01:03 +1000)] 
xv: remove some disturbing abuses of buffer related things

Also brings to attention a point about the overlay when we use a real
memory manager.  We'll need to find a way for the overlay to signal it's
finished with a buffer, or just resort to pinning pPriv->video_mem..

15 years agoEXA: add a pixmapIsOffscreen hook.
Maarten Maathuis [Sun, 6 Jul 2008 11:45:32 +0000 (13:45 +0200)] 
EXA: add a pixmapIsOffscreen hook.

15 years agoNV50_KMS: support gamma changes
Maarten Maathuis [Sun, 6 Jul 2008 10:52:16 +0000 (12:52 +0200)] 
NV50_KMS: support gamma changes

15 years agoNV50: Unaccelerated rotation support.
Maarten Maathuis [Sun, 6 Jul 2008 10:29:13 +0000 (12:29 +0200)] 
NV50: Unaccelerated rotation support.

- This will need a PixmapIsOffscreen hook before it will be considered for acceleration.

15 years agoNV50_KMS: Unaccelerated rotation support.
Maarten Maathuis [Sat, 5 Jul 2008 23:03:44 +0000 (01:03 +0200)] 
NV50_KMS: Unaccelerated rotation support.

- This will need a PixmapIsOffscreen hook for it to be ever considered for acceleration.

15 years agoRevert "EXA: Add PixmapIsOffscreen hook for EXA versions that allow it."
Maarten Maathuis [Sat, 5 Jul 2008 23:02:45 +0000 (01:02 +0200)] 
Revert "EXA: Add PixmapIsOffscreen hook for EXA versions that allow it."

This reverts commit 5a5aee10f84fbea70eee69ece17ddf6e797497a6.
This was never supposed to end up here as it's broken.

15 years agoEXA: Add PixmapIsOffscreen hook for EXA versions that allow it.
Maarten Maathuis [Sat, 5 Jul 2008 21:07:58 +0000 (23:07 +0200)] 
EXA: Add PixmapIsOffscreen hook for EXA versions that allow it.

- This should allow more flexibility for rotation shadow buffers.

15 years agoxv: remove some defines that are in a header now
Ben Skeggs [Sat, 5 Jul 2008 17:50:03 +0000 (03:50 +1000)] 
xv: remove some defines that are in a header now

15 years agoxv: remove drawable handling from hw-specific PutImage.. it's common...
Ben Skeggs [Sat, 5 Jul 2008 16:28:26 +0000 (02:28 +1000)] 
xv: remove drawable handling from hw-specific PutImage.. it's common...

15 years agoxv: misc cleanups
Ben Skeggs [Sat, 5 Jul 2008 15:57:17 +0000 (01:57 +1000)] 
xv: misc cleanups

15 years agoNV50_KMS: minor change
Maarten Maathuis [Sat, 5 Jul 2008 10:47:48 +0000 (12:47 +0200)] 
NV50_KMS: minor change

15 years agoFix some compile warnings.
Maarten Maathuis [Fri, 4 Jul 2008 21:05:20 +0000 (23:05 +0200)] 
Fix some compile warnings.

15 years agoxv: reformat source so mere mortals can understand it
Ben Skeggs [Thu, 3 Jul 2008 13:54:13 +0000 (23:54 +1000)] 
xv: reformat source so mere mortals can understand it

15 years agoxv: nv_video.c to nouveau_xv.c
Ben Skeggs [Thu, 3 Jul 2008 07:07:45 +0000 (17:07 +1000)] 
xv: nv_video.c to nouveau_xv.c

15 years agoNV50_KMS: autodetect kernel modesetting when active
Maarten Maathuis [Thu, 3 Jul 2008 06:30:43 +0000 (08:30 +0200)] 
NV50_KMS: autodetect kernel modesetting when active

15 years agoNV50_KMS: no int10 please
Maarten Maathuis [Wed, 2 Jul 2008 17:04:58 +0000 (19:04 +0200)] 
NV50_KMS: no int10 please

15 years agoBackport console font save/restore from nouveau_ms
Stuart Bennett [Fri, 27 Jun 2008 15:21:19 +0000 (16:21 +0100)] 
Backport console font save/restore from nouveau_ms

15 years agorandr12: fix mode detection for when screen size changes
Stuart Bennett [Thu, 26 Jun 2008 13:44:45 +0000 (14:44 +0100)] 
randr12: fix mode detection for when screen size changes

also some mem leaks

15 years agoNV04-NV4E: Save and restore FB_START
Maarten Maathuis [Sat, 28 Jun 2008 13:47:18 +0000 (15:47 +0200)] 
NV04-NV4E: Save and restore FB_START

15 years agoNV50_KMS: switch to output dpms
Maarten Maathuis [Fri, 27 Jun 2008 16:49:16 +0000 (18:49 +0200)] 
NV50_KMS: switch to output dpms

15 years agoProperly close drm when exiting + misc cleanup.
Maarten Maathuis [Wed, 25 Jun 2008 17:45:12 +0000 (19:45 +0200)] 
Properly close drm when exiting + misc cleanup.

15 years agoFixup and add some license statements.
Maarten Maathuis [Wed, 25 Jun 2008 17:07:58 +0000 (19:07 +0200)] 
Fixup and add some license statements.

- The changed statements are a response to nv commit 2fdcda8ea62eba1b7885f0a75249884715936247.

15 years agochange hack to work with latest drm changes..
Ben Skeggs [Tue, 24 Jun 2008 18:01:21 +0000 (04:01 +1000)] 
change hack to work with latest drm changes..

15 years agoNV50: unbreak kms and implement a basic off mode/dpms
Maarten Maathuis [Mon, 23 Jun 2008 22:02:25 +0000 (00:02 +0200)] 
NV50: unbreak kms and implement a basic off mode/dpms

15 years agonv50: stub out NV50SorSetClockMode for LVDS, it doesn't work there
Ben Skeggs [Mon, 23 Jun 2008 16:24:42 +0000 (02:24 +1000)] 
nv50: stub out NV50SorSetClockMode for LVDS, it doesn't work there

15 years agonv50: bring in int10-constole-restore hack from nv driver
Ben Skeggs [Sun, 22 Jun 2008 16:10:09 +0000 (02:10 +1000)] 
nv50: bring in int10-constole-restore hack from nv driver

Lack of console restore has been annoying me personally lately while working
on 3D, I lack the time/modsetting skills to fix it properly at the moment,
so this'll do.

15 years agofix non-kms build/run
Ben Skeggs [Sun, 22 Jun 2008 15:47:55 +0000 (01:47 +1000)] 
fix non-kms build/run

15 years agoNV50: Some basic code to get kernel modesetting going.
Maarten Maathuis [Sun, 22 Jun 2008 14:34:22 +0000 (16:34 +0200)] 
NV50: Some basic code to get kernel modesetting going.

- This will get a cleanup later on.

15 years agoNo need for G80+ LVDS conf bits reports
Stuart Bennett [Fri, 13 Jun 2008 01:11:09 +0000 (02:11 +0100)] 
No need for G80+ LVDS conf bits reports

I've got a few already.

15 years agoMore DCB 1.5 TV variants (#16252 and #16342)
Stuart Bennett [Fri, 13 Jun 2008 00:58:41 +0000 (01:58 +0100)] 
More DCB 1.5 TV variants (#16252 and #16342)

15 years agoBe a little more discerning about the BIT bios signature
Stuart Bennett [Fri, 13 Jun 2008 00:40:31 +0000 (01:40 +0100)] 
Be a little more discerning about the BIT bios signature

Thank you ABIT

15 years agoLVDS_INIT should not always use head A
Stuart Bennett [Fri, 13 Jun 2008 00:25:49 +0000 (01:25 +0100)] 
LVDS_INIT should not always use head A

While the script doesn't need the head variable set correctly,
link_head_and_output still gets called and will therefore break panels expecting
to be on head B
Fixes Apple NV34 console restore

15 years agoNV50: lvds is probably still broken, but it's a step in the right direction
Maarten Maathuis [Fri, 13 Jun 2008 17:12:38 +0000 (19:12 +0200)] 
NV50: lvds is probably still broken, but it's a step in the right direction

- Just something i had lingering around.
- Note that lvds still doesn't run by default, but you're more than welcome to fix it ;-)

15 years agoNV50: A small extra piece of init that may prove useful to someone, somewhere, at...
Maarten Maathuis [Thu, 22 May 2008 19:08:48 +0000 (21:08 +0200)] 
NV50: A small extra piece of init that may prove useful to someone, somewhere, at some point for something.

15 years agoNV50: Be consistent with rules-ng.
Maarten Maathuis [Tue, 20 May 2008 17:19:53 +0000 (19:19 +0200)] 
NV50: Be consistent with rules-ng.

16 years agoNV50: Some misc things.
Maarten Maathuis [Sat, 10 May 2008 19:58:00 +0000 (21:58 +0200)] 
NV50: Some misc things.

16 years agoCosmetic g80 laptop dcb parsing enhancement
Stuart Bennett [Thu, 8 May 2008 20:36:05 +0000 (21:36 +0100)] 
Cosmetic g80 laptop dcb parsing enhancement

16 years agorandr12: some reordering, tidying &c
Stuart Bennett [Thu, 8 May 2008 13:17:38 +0000 (14:17 +0100)] 
randr12: some reordering, tidying &c

16 years agoEnable RandR 1.2 code-path by default
Stuart Bennett [Tue, 29 Apr 2008 18:42:54 +0000 (19:42 +0100)] 
Enable RandR 1.2 code-path by default

16 years agoDon't call call_lvds_script with a null dcbent pointer
Stuart Bennett [Wed, 7 May 2008 20:25:03 +0000 (21:25 +0100)] 
Don't call call_lvds_script with a null dcbent pointer

Stumbled over by hiyuh :)

16 years agorandr12: tidy up some nv50 remnants in the pre nv50 code
Stuart Bennett [Sun, 4 May 2008 23:56:28 +0000 (00:56 +0100)] 
randr12: tidy up some nv50 remnants in the pre nv50 code

16 years agoNV50: Some misc fixes.
Maarten Maathuis [Tue, 6 May 2008 17:46:52 +0000 (19:46 +0200)] 
NV50: Some misc fixes.

- Even though tv-out is mentioned, it by no means implies that is (nearly) functional.

16 years agonv50_exa.c had no license statement.
Maarten Maathuis [Mon, 5 May 2008 09:02:07 +0000 (11:02 +0200)] 
nv50_exa.c had no license statement.

16 years agoNV50: Rework the modesetting code into a different model.
Maarten Maathuis [Sun, 4 May 2008 23:26:37 +0000 (01:26 +0200)] 
NV50: Rework the modesetting code into a different model.

- There is now interface independent code for most things.
- This structure, although not exclusive, is only used for NV50 atm.
- The change in approach is that the concept of a connector is added to the model (randr12 sucks in this aspect).
- I'm hacking around randr trying to create a single output for each connector, the indices are the bus numbers.
- Limitations: Hot swapping vga and dvi of same monitor will not make randr12 think it changed, so for the moment force a change.
- Concept is largely inspired by the radeonhd driver.

16 years agoxv: nv10 double-buffered overlay mode was getting set on nv04
Stuart Bennett [Fri, 2 May 2008 19:36:59 +0000 (20:36 +0100)] 
xv: nv10 double-buffered overlay mode was getting set on nv04

16 years agoUse the actual number of BIT table entries
Stuart Bennett [Tue, 29 Apr 2008 23:59:47 +0000 (00:59 +0100)] 
Use the actual number of BIT table entries

16 years agorandr12, xv: manual overlay clipping for randr12 (see #12825)
Stuart Bennett [Mon, 28 Apr 2008 15:51:01 +0000 (16:51 +0100)] 
randr12, xv: manual overlay clipping for randr12 (see #12825)

There could be something to be said for doing this clipping when using the blitter and texture adapters too

16 years agorandr12: remove unneeded separate dcb_entry and "or" members
Stuart Bennett [Tue, 29 Apr 2008 21:53:40 +0000 (22:53 +0100)] 
randr12: remove unneeded separate dcb_entry and "or" members

Make off-chip outputs clearer too

16 years agoPass DCB entry structs in bios functions, rather than index
Stuart Bennett [Tue, 29 Apr 2008 21:08:01 +0000 (22:08 +0100)] 
Pass DCB entry structs in bios functions, rather than index

16 years agoPass output field, rather than dcb indices, for tmds access functions
Stuart Bennett [Tue, 29 Apr 2008 20:53:22 +0000 (21:53 +0100)] 
Pass output field, rather than dcb indices, for tmds access functions

16 years agoAdd an index field to dcb entries, and carry pointer to dcb entry in output struct
Stuart Bennett [Tue, 29 Apr 2008 20:58:17 +0000 (21:58 +0100)] 
Add an index field to dcb entries, and carry pointer to dcb entry in output struct

16 years agorandr12, xv: oops, transform_in_use doesn't exist on xserver 1.3
Stuart Bennett [Tue, 29 Apr 2008 20:27:07 +0000 (21:27 +0100)] 
randr12, xv: oops, transform_in_use doesn't exist on xserver 1.3

16 years agorandr12: C51 I2C
Stuart Bennett [Mon, 28 Apr 2008 01:12:17 +0000 (02:12 +0100)] 
randr12: C51 I2C

16 years agorandr12: only set cr59 to 1 for tmds (fixes nv34 issue)
Stuart Bennett [Tue, 29 Apr 2008 17:46:24 +0000 (18:46 +0100)] 
randr12: only set cr59 to 1 for tmds (fixes nv34 issue)

16 years agorandr12, xv: no overlay when the crtc is transformed
Stuart Bennett [Mon, 28 Apr 2008 16:00:27 +0000 (17:00 +0100)] 
randr12, xv: no overlay when the crtc is transformed

16 years agorandr12: fix spread spectrum setting for lvds and turn it off during dpms off
Stuart Bennett [Sat, 26 Apr 2008 01:08:24 +0000 (02:08 +0100)] 
randr12: fix spread spectrum setting for lvds and turn it off during dpms off

Assuming that the bios has set this up correctly for LVDS initially is probably safe

16 years agorandr12: make nv50 code depend on Architecture
Stuart Bennett [Sat, 26 Apr 2008 18:59:58 +0000 (19:59 +0100)] 
randr12: make nv50 code depend on Architecture

16 years agoCR27 appears to contain the chip revision
Stuart Bennett [Sat, 26 Apr 2008 00:21:50 +0000 (01:21 +0100)] 
CR27 appears to contain the chip revision

16 years agoNV50: A little bit more information, no functional change.
Maarten Maathuis [Sun, 27 Apr 2008 17:52:41 +0000 (19:52 +0200)] 
NV50: A little bit more information, no functional change.

16 years agorandr12: sel_clk binding fix
Stuart Bennett [Fri, 25 Apr 2008 21:09:46 +0000 (22:09 +0100)] 
randr12: sel_clk binding fix

16 years agorandr12: unified mode validation
Stuart Bennett [Fri, 25 Apr 2008 01:09:18 +0000 (02:09 +0100)] 
randr12: unified mode validation

doublescan/interlace limits applied too

16 years agorandr12: only set up one spread spectrum clock on pre nv40
Stuart Bennett [Thu, 24 Apr 2008 23:03:41 +0000 (00:03 +0100)] 
randr12: only set up one spread spectrum clock on pre nv40

avoids inadvertently getting wobbly crt pictures

16 years agorandr12: deny doublescan modes to digital outputs
Stuart Bennett [Thu, 24 Apr 2008 21:23:50 +0000 (22:23 +0100)] 
randr12: deny doublescan modes to digital outputs

16 years agorandr12: off-chip dvi dpms and fp_control dpms fixed properly
Stuart Bennett [Thu, 24 Apr 2008 00:22:49 +0000 (01:22 +0100)] 
randr12: off-chip dvi dpms and fp_control dpms fixed properly

Also solves output exclusion problem: two crtcs claiming the same output
through cr33 does not work

16 years agorandr12: set CRTCX_LCD in nv_output
Stuart Bennett [Wed, 23 Apr 2008 23:24:35 +0000 (00:24 +0100)] 
randr12: set CRTCX_LCD in nv_output

This makes my nv28 external dvi work.

16 years agoThese made up defines are more misleading than helpful
Stuart Bennett [Wed, 23 Apr 2008 23:01:50 +0000 (00:01 +0100)] 
These made up defines are more misleading than helpful

16 years agorandr12: remove FPP setting and other FSEL changes
Stuart Bennett [Tue, 22 Apr 2008 21:42:12 +0000 (22:42 +0100)] 
randr12: remove FPP setting and other FSEL changes

16 years agorandr12: oops (fix to 9edf6d60)
Stuart Bennett [Tue, 22 Apr 2008 22:25:40 +0000 (23:25 +0100)] 
randr12: oops (fix to 9edf6d60)

16 years agorandr12: RAMDAC_OUTPUT is only for analogue outputs
Stuart Bennett [Tue, 22 Apr 2008 20:34:52 +0000 (21:34 +0100)] 
randr12: RAMDAC_OUTPUT is only for analogue outputs

16 years agoRevert "randr12: correct SEL_CLK register beheaviour for outputs with or=2"
Stuart Bennett [Tue, 22 Apr 2008 20:29:48 +0000 (21:29 +0100)] 
Revert "randr12: correct SEL_CLK register beheaviour for outputs with or=2"

This reverts commit 77af887089be6fef7b793e3c3afdb98ac90a2e8c.

External DVI (which is source of or == 2) do not use SEL_CLK

16 years agoNV50: Another few regs.
Maarten Maathuis [Sun, 13 Apr 2008 00:40:55 +0000 (02:40 +0200)] 
NV50: Another few regs.

16 years agoNV50: Some more regs.
Maarten Maathuis [Sun, 13 Apr 2008 00:16:27 +0000 (02:16 +0200)] 
NV50: Some more regs.

16 years agoNV50: I now know what UNK8A8 is, so update the value register as well.
Maarten Maathuis [Sat, 12 Apr 2008 23:21:20 +0000 (01:21 +0200)] 
NV50: I now know what UNK8A8 is, so update the value register as well.

16 years agoNV50: Re-implement output status caching.
Maarten Maathuis [Sat, 12 Apr 2008 00:11:32 +0000 (02:11 +0200)] 
NV50: Re-implement output status caching.

16 years agorandr12: separate pll and arbitration stages of calc_state_ext, and call from mode_se...
Stuart Bennett [Fri, 11 Apr 2008 16:28:16 +0000 (17:28 +0100)] 
randr12: separate pll and arbitration stages of calc_state_ext, and call from mode_set directly

16 years agostate->config is not used
Stuart Bennett [Fri, 11 Apr 2008 15:20:21 +0000 (16:20 +0100)] 
state->config is not used

16 years agorandr12: unite pre nv40 and nv40 pll restore
Stuart Bennett [Fri, 4 Apr 2008 17:59:29 +0000 (18:59 +0100)] 
randr12: unite pre nv40 and nv40 pll restore

16 years agoUse the correct reference clock when reading (V)PLLs
Stuart Bennett [Tue, 8 Apr 2008 01:25:34 +0000 (02:25 +0100)] 
Use the correct reference clock when reading (V)PLLs

16 years agoVarious PLL code improvements
Stuart Bennett [Tue, 8 Apr 2008 01:25:22 +0000 (02:25 +0100)] 
Various PLL code improvements

16 years agoNV50: Some misc stuff.
Maarten Maathuis [Wed, 9 Apr 2008 16:55:06 +0000 (18:55 +0200)] 
NV50: Some misc stuff.

16 years agonv50: fix distcheck since header removal
Dave Airlie [Tue, 8 Apr 2008 06:48:37 +0000 (16:48 +1000)] 
nv50: fix distcheck since header removal

16 years agoMCP67 does not do the second stage gain tests
Stuart Bennett [Mon, 7 Apr 2008 23:28:03 +0000 (00:28 +0100)] 
MCP67 does not do the second stage gain tests

16 years agoPLL stuff
Stuart Bennett [Tue, 8 Apr 2008 00:31:14 +0000 (01:31 +0100)] 
PLL stuff

16 years agoIf no PLL coefficients compatible with the constraints exist, don't brick the hardware
Stuart Bennett [Sat, 5 Apr 2008 04:20:54 +0000 (05:20 +0100)] 
If no PLL coefficients compatible with the constraints exist, don't brick the hardware

16 years agoNV50: Scaling works fine on VGA connectors, so support that as well.
Maarten Maathuis [Mon, 7 Apr 2008 20:12:44 +0000 (22:12 +0200)] 
NV50: Scaling works fine on VGA connectors, so support that as well.

- The default is SCALE_PANEL instead of SCALE_ASPECT for obvious reasons.

16 years agoNV50: Deobfuscate some more commands.
Maarten Maathuis [Mon, 7 Apr 2008 19:18:54 +0000 (21:18 +0200)] 
NV50: Deobfuscate some more commands.

16 years agoMake some CARD32 die.
Maarten Maathuis [Mon, 7 Apr 2008 17:29:55 +0000 (19:29 +0200)] 
Make some CARD32 die.

16 years agoNV50: Give a few registers an UNK label.
Maarten Maathuis [Mon, 7 Apr 2008 17:09:35 +0000 (19:09 +0200)] 
NV50: Give a few registers an UNK label.

16 years agorandr12: NV04/05/06 can't accelerate rotation, so it's better to disable it.
Maarten Maathuis [Mon, 7 Apr 2008 16:35:18 +0000 (18:35 +0200)] 
randr12: NV04/05/06 can't accelerate rotation, so it's better to disable it.

16 years agoNV50: Some more stuff.
Maarten Maathuis [Sun, 6 Apr 2008 21:36:15 +0000 (23:36 +0200)] 
NV50: Some more stuff.

16 years agoNV50: minor rename to avoid confusion
Maarten Maathuis [Sun, 6 Apr 2008 17:49:11 +0000 (19:49 +0200)] 
NV50: minor rename to avoid confusion