SlackwareThis Forum is for the discussion of Slackware Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
Distribution: Slackware (personalized Window Maker), Mint (customized MATE)
Posts: 1,309
Rep:
Fglrx module compilation problem
I can't compile fglrx module using SlackBuilds in Slackware 12.2. Maybe it's because I use SlackBuild for Slackware 12.1 but at the moment there is no SlackBuild for Slackware 12.2.
In Slackware 12.1 I compile that module without problems (Listing 1.). In Slackware 12.2 I can't do it (Listing 2.).
Is that problem caused by improper SlackBuild version (12.1 instead of 12.2) or there is another reason for that?
Listing 1.
Code:
# ./fglrx-module.SlackBuild
Created directory fglrx-install.bPyK8J
Verifying archive integrity... All good.
Uncompressing ATI Proprietary Linux Driver-8.512........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
==================================================
ATI Technologies Linux Driver Installer/Packager
==================================================
Generating package: Slackware/Only_Module
ATI SlackBuild Version 1.3.2
--------------------------------------------
by: Emanuele Tomasi <tomasiATcli.di.unipi.it>
Ezio Ghibaudo <ekxiusATgmail.com>
Federico Rota <federico.rota01ATgmail.com>
ATI module generator V 2.0
==========================
initializing...
cleaning...
patching 'highmem.h'...
assuming new VMA API since we do have kernel 2.6.x...
Assuming default VMAP API
Assuming default munmap API
doing Makefile based build for kernel 2.6.x and higher
make -C /lib/modules/2.6.24.5-custom-smp/build SUBDIRS=/tmp/SBo/package-fglrx-module/fglrx-install.bPyK8J/common/lib/modules/fglrx/build_mod/2.6.x modules
make[1]: Entering directory `/usr/src/linux-2.6.24.5'
CC [M] /tmp/SBo/package-fglrx-module/fglrx-install.bPyK8J/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.o
/tmp/SBo/package-fglrx-module/fglrx-install.bPyK8J/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:6768: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.bPyK8J/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:6794: warning: initialization from incompatible pointer type
LD [M] /tmp/SBo/package-fglrx-module/fglrx-install.bPyK8J/common/lib/modules/fglrx/build_mod/2.6.x/fglrx.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/SBo/package-fglrx-module/fglrx-install.bPyK8J/common/lib/modules/fglrx/build_mod/2.6.x/fglrx.mod.o
LD [M] /tmp/SBo/package-fglrx-module/fglrx-install.bPyK8J/common/lib/modules/fglrx/build_mod/2.6.x/fglrx.ko
make[1]: Leaving directory `/usr/src/linux-2.6.24.5'
build succeeded with return value 0
duplicating results into driver repository...
done.
==============================
You must change your working directory to /tmp/SBo/package-fglrx-module/fglrx-install.bPyK8J/common/lib/modules/fglrx
and then call ./make_install.sh in order to install the built module.
==============================
Slackware package maker, version 2.1.
Searching for symbolic links:
No symbolic links were found, so we won't make an installation script.
You can make your own later in ./install/doinst.sh and rebuild the
package if you like.
This next step is optional - you can set the directories in your package
to some sane permissions. If any of the directories in your package have
special permissions, then DO NOT reset them here!
Would you like to reset all directory permissions to 755 (drwxr-xr-x) and
directory ownerships to root.root ([y]es, [n]o)? n
Creating tar file fglrx-module-8.512-x86-1_kernel_2.6.24.5_custom_smp.tar...
./
lib/
lib/modules/
lib/modules/2.6.24.5-custom-smp/
lib/modules/2.6.24.5-custom-smp/external/
lib/modules/2.6.24.5-custom-smp/external/fglrx.ko.gz
install/
install/doinst.sh
install/slack-desc
tar-1.13: fglrx-module-8.512-x86-1_kernel_2.6.24.5_custom_smp.tar is the archive; not dumped
Gzipping fglrx-module-8.512-x86-1_kernel_2.6.24.5_custom_smp.tar...
Renaming fglrx-module-8.512-x86-1_kernel_2.6.24.5_custom_smp.tar.gz to fglrx-module-8.512-x86-1_kernel_2.6.24.5_custom_smp.tgz...
Package creation complete.
Removing temporary directory: fglrx-install.bPyK8J
Exploding package /tmp/SBo/package-fglrx-module/fglrx-module-8.512-x86-1_kernel_2.6.24.5_custom_smp.tgz in current directory:
./
lib/
lib/modules/
lib/modules/2.6.24.5-custom-smp/
lib/modules/2.6.24.5-custom-smp/external/
lib/modules/2.6.24.5-custom-smp/external/fglrx.ko.gz
install/
install/doinst.sh
install/slack-desc
An installation script was detected in ./install/doinst.sh, but
was not executed.
Slackware package maker, version 2.1.
Searching for symbolic links:
No symbolic links were found, so we won't make an installation script.
You can make your own later in ./install/doinst.sh and rebuild the
package if you like.
This next step is optional - you can set the directories in your package
to some sane permissions. If any of the directories in your package have
special permissions, then DO NOT reset them here!
Would you like to reset all directory permissions to 755 (drwxr-xr-x) and
directory ownerships to root.root ([y]es, [n]o)? n
Creating tar file fglrx-module-8.512_2.6.24.5_custom_smp-i486-1_SBo.tar...
./
lib/
lib/modules/
lib/modules/2.6.24.5-custom-smp/
lib/modules/2.6.24.5-custom-smp/kernel/
lib/modules/2.6.24.5-custom-smp/kernel/drivers/
lib/modules/2.6.24.5-custom-smp/kernel/drivers/video/
lib/modules/2.6.24.5-custom-smp/kernel/drivers/video/fglrx.ko
usr/
usr/doc/
usr/doc/fglrx-module-8.512_2.6.24.5_custom_smp/
usr/doc/fglrx-module-8.512_2.6.24.5_custom_smp/fglrx-module.SlackBuild
install/
install/doinst.sh
install/slack-desc
tar-1.13: fglrx-module-8.512_2.6.24.5_custom_smp-i486-1_SBo.tar is the archive; not dumped
Gzipping fglrx-module-8.512_2.6.24.5_custom_smp-i486-1_SBo.tar...
Renaming fglrx-module-8.512_2.6.24.5_custom_smp-i486-1_SBo.tar.gz to fglrx-module-8.512_2.6.24.5_custom_smp-i486-1_SBo.tgz...
Moving fglrx-module-8.512_2.6.24.5_custom_smp-i486-1_SBo.tgz to /tmp...
Package creation complete.
Listing 2.
Code:
$ ./fglrx-module.SlackBuild
Created directory fglrx-install.Vhelhw
Verifying archive integrity... All good.
Uncompressing ATI Proprietary Linux Driver-8.512........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
==================================================
ATI Technologies Linux Driver Installer/Packager
==================================================
Generating package: Slackware/Only_Module
ATI SlackBuild Version 1.3.2
--------------------------------------------
by: Emanuele Tomasi <tomasiATcli.di.unipi.it>
Ezio Ghibaudo <ekxiusATgmail.com>
Federico Rota <federico.rota01ATgmail.com>
ATI module generator V 2.0
==========================
initializing...
cleaning...
patching 'highmem.h'...
assuming new VMA API since we do have kernel 2.6.x...
Assuming default VMAP API
Assuming default munmap API
doing Makefile based build for kernel 2.6.x and higher
make -C /lib/modules/2.6.27.7-smp/build SUBDIRS=/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x modules
make[1]: Entering directory `/usr/src/linux-2.6.27.7'
CC [M] /tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.o
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function 'KCL_ProcessIsTerminated':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1412: error: implicit declaration of function 'find_task_by_pid'
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1412: warning: assignment makes pointer from integer without a cast
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function 'KCL_GetInitKerPte':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:2744: error: 'NOPAGE_SIGBUS' undeclared (first use in this function)
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:2744: error: (Each undeclared identifier is reported only once
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:2744: error: for each function it appears in.)
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function 'KCL_GetPte':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:2782: error: 'NOPAGE_SIGBUS' undeclared (first use in this function)
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function 'KCL_GetPageTableByVirtAddr':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:2845: error: 'NOPAGE_SIGBUS' undeclared (first use in this function)
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function 'KCL_TestAndClearPageDirtyFlag':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:2972: error: 'NOPAGE_SIGBUS' undeclared (first use in this function)
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function 'KCL_GetDmaPhysAddr':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:3016: error: 'NOPAGE_SIGBUS' undeclared (first use in this function)
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function '__ke_flush_cache':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:3238: error: too many arguments to function 'smp_call_function'
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: At top level:
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4177: error: unknown field 'nopage' specified in initializer
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4177: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4195: error: unknown field 'nopage' specified in initializer
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4195: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4202: error: unknown field 'nopage' specified in initializer
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4202: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4209: error: unknown field 'nopage' specified in initializer
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4209: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4216: error: unknown field 'nopage' specified in initializer
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4216: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4223: error: unknown field 'nopage' specified in initializer
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4223: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4230: error: unknown field 'nopage' specified in initializer
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4230: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4239: error: unknown field 'nopage' specified in initializer
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4239: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function 'KCL_CallFuncOnOtherCpus':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:4921: error: too many arguments to function 'smp_call_function'
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function 'KCL_enable_pat':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:5032: error: too many arguments to function 'smp_call_function'
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function 'KCL_disable_pat':
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:5050: error: too many arguments to function 'smp_call_function'
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: At top level:
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:6768: warning: initialization from incompatible pointer type
/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:6794: warning: initialization from incompatible pointer type
make[2]: *** [/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x/firegl_public.o] Error 1
make[1]: *** [_module_/tmp/SBo/package-fglrx-module/fglrx-install.Vhelhw/common/lib/modules/fglrx/build_mod/2.6.x] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.27.7'
make: *** [kmod_build] Error 2
build failed with return value 2
ERROR: i don't have make module
Removing temporary directory: fglrx-install.Vhelhw
The ATI driver that you are trying to compile is "8.512" and doesn't work with the 2.6.27.* kernels without patching. Download the newest one that is at version "8.561" from ati.amd.com and you should be able to install it without any problems. That's what I did when I installed Slackware 12.2. You can get the new driver at this address. http://a248.e.akamai.net/f/674/9206/...x86.x86_64.run
Distribution: Slackware (personalized Window Maker), Mint (customized MATE)
Posts: 1,309
Original Poster
Rep:
Thank you for your hint. At the moment it seems I don't need fglrx driver. I just changed vga option in lilo.conf and now X Window and console work well. I used that driver with Slackware 12.1 and my ThinkPad T60 merely because of some problems with X Window and console. Anyway it's good to know that there is new fglrx module for the current kernel. Maybe I'll need it in the future.
I did need to use a different framebuffer however since the text in a console became a very faint gray. I am using vga=791 for my frame buffer (without that, Tux just didn't look right).
Distribution: Slackware (personalized Window Maker), Mint (customized MATE)
Posts: 1,309
Original Poster
Rep:
When you use vga = 773 mode in /etc/lilo.conf and generic radeon module in /etx/X11/xorg.conf Tux at the boot procedures looks bad and X Window spoils the console -- after exiting window manager text on the console becomes dark gray. To repair both these flaws it it's enough to change that mode to vga = 791. Changing module from radeon to fglrx removes the second problem too. The difference is: when you change vga mode you need to reload the entire system, and when you change module you need to reload X Window only. MPlayer's users have another reason to change xorg.conf module. With radeon it's impossible to scale the movie to full screen size -- with fglrx that function works well.
All these problems concern at least Thinkpad T60 with ATI Radeon X1300.
I'm having a bit of trouble getting DRI working properly. When I enable with the "usual" DRI section in my xorg.conf, it "works," but when I unlock (after a screen lock), window borders are corrupted (basically mostly black). Also the dialog for entering the password did not display when the screen was locked, but my password was accepted.
Have you tried the radeon or radeonhd drivers. After upgrading libdrm and mesa(so I could get DRI working properly), I am holy satisfied with the 2D and textured video support. Still have not tested all the games I normally run with 3D rendering. But I suggest you give it a go.
fglrx just gets so slow after awhile. But you just have to alter the slackbuild from slackbuilds.org and it will work. fglrx-switch is really the only benefit of using the build from them.
If you still wanna mess around with fglrx, try disabling compositing and AIGLX. For me disabling them gave some performance increaces and stablity.
I just tried kdesktop_lock and it works well. It seems your problem is X1400 issue.
I don't think it is entirely an X1400 problem. I use the Radeon Mobility X1400 ATI card on my notebook and I've installed the ati-driver-installer-8-12-x86.x86_64.run driver on kernel's 2.6.27.7, 2.6.27.8, and 2.6.28 without any problems. This may have nothing to do with it but I did a clean install to Slackware 12.2 instead of an upgrade.
Have you tried the radeon or radeonhd drivers. After upgrading libdrm and mesa(so I could get DRI working properly), I am holy satisfied with the 2D and textured video support. Still have not tested all the games I normally run with 3D rendering. But I suggest you give it a go.
fglrx just gets so slow after awhile. But you just have to alter the slackbuild from slackbuilds.org and it will work. fglrx-switch is really the only benefit of using the build from them.
If you still wanna mess around with fglrx, try disabling compositing and AIGLX. For me disabling them gave some performance increaces and stablity.
Which versions of libdrm and mesa did you upgrade to?
Also, the only slackbuilds I saw were for 12.1. Is that what you mean by needing to alter them (I'm on 12.2)? What are you referring to with fglrx-switch? Is this display switching on a laptop or something else?
I don't think it is entirely an X1400 problem. I use the Radeon Mobility X1400 ATI card on my notebook and I've installed the ati-driver-installer-8-12-x86.x86_64.run driver on kernel's 2.6.27.7, 2.6.27.8, and 2.6.28 without any problems. This may have nothing to do with it but I did a clean install to Slackware 12.2 instead of an upgrade.
Then I must have missed a step.
Would you care to post the relevant sections of your xorg.conf so I can see if I'm missing anything?
Also, what are you supposed to do about agpgart? I thought that fglrx had its own. I tried commenting out the modprobe statement in rc.modules, but an lsmod still showed agpgart.
I've never had to play around with my xorg.conf file to get my graphics card to work. I can tell that it worked by the fglrxinfo command
Code:
# fglrxinfo
display: :0.0 screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: ATI Mobility Radeon X1400
OpenGL version string: 2.1.8304 Release
Quote:
Originally Posted by statguy
Would you care to post the relevant sections of your xorg.conf so I can see if I'm missing anything?
What information would you like to see. Like I said I've never touched the xorg.conf file, but if you'd like that information I can provide it.
Quote:
Originally Posted by statguy
Also, what are you supposed to do about agpgart? I thought that fglrx had its own. I tried commenting out the modprobe statement in rc.modules, but an lsmod still showed agpgart.
I've never had a problem with agpgart. This is what I have loaded.
Thanks larryhaja. I tried that. Here are the results.
Code:
$ fglrxinfo
libGL error: open DRM failed (Operation not permitted)
libGL error: reverting to (slow) indirect rendering
display: :0.0 screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: ATI Mobility Radeon X1400
OpenGL version string: 1.4 (2.1.8304 Release)
The default configuration does not permit the general user to use direct rendering. The fixes I have read involve adding the following section (there are slight variations on this, all with the same result).
Code:
Section "DRI"
Group "video"
Mode 0660
EndSection
With that in place, fglrxinfo gives the following:
Code:
$ fglrxinfo
display: :0.0 screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: ATI Mobility Radeon X1400
OpenGL version string: 2.1.8304 Release
So, I now have permission to use direct rendering. But, when I do, for example with the OpenGL screensaver I happen to like, the password dialog does not appear when unlocking and when I unlock, the window borders have turned black.
Confirmed! After days of unsuccessful attempts to install ati-driver-installer-8-7, I installed ati-driver-installer-8-12 in a few seconds. Thanks for paving the way!
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.