Jump to content

TP-Link TL-WN851N - connection dropping


PookyMacMan
 Share

46 posts in this topic

Recommended Posts

Hello!

 

I just recently received a late Christmas gift; a TP-Link TL-WN851N PCI wireless card! :D

I put it in my system today, spent an hour and a half getting it to work with Apple's Atheros drivers (turned out I needed the IO80211Family.kext from 10.6.2), and I thought everything was perfect.

 

Well, not quite.

 

I just started having problems of my wireless connection just randomly dropping. I keep it under a desk a good distance away from the router, but I don't think it's too far because I use my MacBook farther away and there are no problems...to top it off, even when I shift my computer back into known-distance range, it doesn't detect the network until I restart.

 

Is there anything I can do about it, or is this a very weak wireless card?

 

Thank you very much. I am experienced in hackintoshing, so I can do anything you say/provide more info. :)

Link to comment
Share on other sites

  • 4 weeks later...

Sorry I've been so long - I just got the 10.6.7 kext working, and I thought the problem was gone, but now it's coming back...and now that we just got a new router and it's in the same room as the machine, I know it's the computer's problem and not a range issue.

 

Just ran ioreg and here's the output: ioreg.rtf

Link to comment
Share on other sites

  • 2 weeks later...

I recently looked at a topic in the DSDT subforum that described presenting OS X with a different device ID for various hardware...is this the patch you are talking about?

 

Have you looked at my DSDT/ioreg? :)

Link to comment
Share on other sites

So sorry about your LCD. :( There's no hurry. :) I'll try and see if I can figure it out on my own while you look at my DSDT/ioreg. ;)

Link to comment
Share on other sites

en0 and en1 are backwards.. wireless needs to be en1.

i see its using ar9280 driver so lets fake with ar9285 fix to fake dev id 2a

 

	   Device (PCI4)
		{
			Method (_S1D, 0, NotSerialized)
			{
				Return (One)
			}
			Method (_S3D, 0, NotSerialized)
			{
				If (HACK ())
				{
					Return (0x03)
				}
				Else
				{
					Return (0x02)
				}
			}
			Method (_S4D, 0, NotSerialized)
			{
				If (HACK ())
				{
					Return (0x03)
				}
				Else
				{
					Return (0x02)
				}
			}
			Method (_S5D, 0, NotSerialized)
			{
				If (HACK ())
				{
					Return (0x03)
				}
				Else
				{
					Return (0x02)
				}
			}
			Method (_ADR, 0, NotSerialized)
			{
				Store (0x001E0000, Local0)
				Return (Local0)
			}
			Name (_UID, 0x07)
			Name (_PRW, Package (0x02)
			{
				0x0B,
				0x05
			})
			Method (_PRT, 0, NotSerialized)
			{
				Store (API4, Local0)
				If (LNot (PICF))
				{
					Store (PIC4, Local0)
				}
				Return (Local0)
			}
			Device (LAN0)
			{
				Name (_ADR, 0x08)
				Method (_DSM, 4, NotSerialized)
				{
				   Store (Package (0x04)
					{
				   "built-in",
					Buffer (One)
					{
					  0x01
					},
					"location",
					  Buffer (0x02)
					 {
					  "1"
					 }
				   }, Local0)
				 DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
				Return (Local0)
			   }
			   }
			Device (ARPT)
			{
				Name (_ADR, 0x05)
				Method (_DSM, 4, NotSerialized)
				{
					Store (Package (0x0A)
						{
							"AAPL,slot-name",
							Buffer (0x08)
							{
								"AirPort"
							},
							"device-id",
							Buffer ()
							{
								0x2A,
							},
							"device_type",
							Buffer (0x08)
							{
								"AirPort"
							},
							"subsystem-id",
							Buffer (0x04)
							{
								0x8F, 0x00, 0x00, 0x00
							},
							"subsystem-vendor-id",
							Buffer (0x04)
							{
								0x6B, 0x10, 0x00, 0x00
							}
						}, Local0)
					DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
					Return (Local0)
				}
			}
		}

dsdtpookyarptlan0.aml.zip

Link to comment
Share on other sites

extract dsdt i posted above and rename to dsdt.aml

 

then u know what to do

boot snow one timewith

-v -f

 

i found the dsdt pci0 was _uid 0x04 not 0x00 fixed so now it might work with 10.6.8

i also aded LAN0 to _ADR, 0x08 as shown in ioreg to fix en0 in dsdt.

 

also rtc showed last line 0x10

	Device (RTC)
	{
		Name (_HID, EisaId ("PNP0B00"))
		Method (_CRS, 0, NotSerialized)
		{
			Name (RTCB, ResourceTemplate ()
			{
				IO (Decode16,
					0x0070,			 // Range Minimum
					0x0070,			 // Range Maximum
					0x01,			   // Alignment
					0x10,			   // Length should be 0x08 or 0x02
					)
			})
			Return (RTCB)
		}
	}

should be 0x08 or 0x02 dont think i changed it yet.

 

also the _INI shows if windows 2001 (xp) return msos 0x04

but that if changed to Darwin would cause issues with isli (SLI?) for windows only not osx.. would be enabled and not work right.

so i did not change anything there.

 

i also aded SBUS that was missing

 

i see its chipset ich7.. i used ich8 sbus device id

Link to comment
Share on other sites

Yup, thank you very much. So when you add a device like a WiFi card to the DSDT, you simply add the whole device after the methods of the parent device (in this case PCI4)? Also, how did you know where to add the DTGP method?

 

Sorry for the questions, but I really want to know how DSDT works. :)

Link to comment
Share on other sites

Yup, thank you very much. So when you add a device like a WiFi card to the DSDT, you simply add the whole device after the methods of the parent device (in this case PCI4)? Also, how did you know where to add the DTGP method?

 

Sorry for the questions, but I really want to know how DSDT works. :)

dtgp goes anywhere on _SB not _SB.PCI0.. under or above _WAK works fine.

 

i added whole device cause it uses PCI4@5 in ioreg which means its _ADR, 0x05 so i saw its missing and have to add whole device as attachment of the PCI4 @5 aka _ADR, 0x05 minus the _PRW thats handled by PCI4

 

in my laptop its not shared =RP02.PXS2@0 in ioreg so i just do _DSM and bellow to the line under _ADR, 0x00 not ad whole device ..

i just rename PXS2 to ARPT and add _DSM section under _ADR line

 

this doesnt seem to work with broadcoms due to the way driver accesses directly the device bypassing _DSM.= have to add registers with the device id numbers.. like the IOATA panic fix method

Link to comment
Share on other sites

Thank you very much! I just loaded the new DSDT and I'll see if the problem's fixed. :)

 

So, what was the thing you mentioned about SLI? I don't use SLI but I'm curious...also, what were you talking about with the SBUS? :)

 

Funny thing about the RTC, because I had fixed that last one so it wouldn't reset CMOS...guess I was still wrong. :P

Link to comment
Share on other sites

Thank you very much! I just loaded the new DSDT and I'll see if the problem's fixed. :)

 

So, what was the thing you mentioned about SLI? I don't use SLI but I'm curious...also, what were you talking about with the SBUS? :)

 

Funny thing about the RTC, because I had fixed that last one so it wouldn't reset CMOS...guess I was still wrong. :P

 

isli

	Method (ISLI, 0, NotSerialized)
	{
		If (CondRefOf (_OSI, Local0))
		{
			If (_OSI ("Linux")) // Darwin ?
			{
				Return (One)
			}
			Else
			{
				Return (Zero)
			}
		}
		Else
		{
			Return (Zero)
		}
	}

and this reacts to it

	Method (GUSB, 0, NotSerialized)
{
	If (ISLI ()) //  1 or zero? Else SMI2 (0xBA)
	{
		Return (Zero)
	}
	Else
	{
		Return (SMI2 (0xBA))
	}
}

amd this in wak also

	Method (_WAK, 1, NotSerialized)
{
	If (LEqual (Arg0, 0x04)) // sleep state S4
	{
		GUSB () // Zero or SMI (0xBA) ?
	}

 

i think ISLI isnt SLi but a wake parameter for GUSB ?? as in usb wake from s4 ?

SMI (0xBA) is the parameter that matters on wake.

 

Intel Sleep LInux ?

 

SBUS

Device (SBUS)
	{
		Name (_ADR, 0x001F0003)

search for 001F0003 in any dsdt to find sbus

 

is missing on dells a lot

so i added this basic SBUS of ich8= 283E

		Device (SBUS)
	{
		Name (_ADR, 0x001F0003)
		Device (BUS0)
		{
			Name (_CID, "smbus")
			Name (_ADR, Zero)
			Device (DVL0)
			{
				Name (_ADR, 0x57)
				Name (_CID, "diagsvault")
			}
		}

		Method (_DSM, 4, NotSerialized)
		{
			Store (Package (0x0A)
				{
					"built-in",
					Buffer (One)
					{
						0x00
					},

					"name",
					"pci8086,283e",
					"device-id",
					Buffer (0x04)
					{
						0x3E, 0x28, 0x00, 0x00
					},

					"subsystem-id",
					Buffer (0x04)
					{
						0xA0, 0x00, 0x00, 0x00
					},

					"subsystem-vendor-id",
					Buffer (0x04)
					{
						0x6B, 0x10, 0x00, 0x00
					}
				}, Local0)
			DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
			Return (Local0)
		}
	}

 

last thing missing is IRQ removals. i have to check it in detail.

with your testing =

DSDT=hd(0,2)/Extra/testdsdt.aml

Link to comment
Share on other sites

I have a MacPro1,1 SMBIOS because I have a Pentium D (thinking that 1,1 is closest in manufacturing year to the Pentium D), is this wrong?

 

The npci flag fixed it! :D Before it would boot successfully but a garbled screen would be displayed; as far as I know there were no errors, but now it will boot with QE/CI in 10.6.8! Thank you, thank you!! :D (I did add the npci flag in my org.chameleon.boot.plist)

 

Now, there are a couple annoyances; for one, wireless is having problems again...this time, when I try to turn it on in Sys Prefs, it beachballs for about 5 seconds and doesn't end up turning AirPort on. What do you think is the matter? Fixed by installing /System/Library/SystemConfiguration/IO80211AirPortMonitor.bundle. :) I've noticed that the computer is in general not as fast to respond as in 10.6.7 (and the login window doesn't come in as smoothly as usual), and looking in activity monitor the kernel_task process takes up 60-65 threads? Is this normal?

 

I still need to load the DSDT; once I do I will report back with results.

Link to comment
Share on other sites

 Share

×
×
  • Create New...